Fetch image from folder via datatable does not work after placing image in subdirectory
- by Arnold Bishkoff
I am having trouble wrapping my head around the following
I have code that fetches an image via smarty in a line
img src="getsnap.php?picid={$data[$smarty.section.sec.index].picno|default:$nextpic}&typ=pic&width={$config.disp_snap_width}&height={$config.disp_snap_height}" class="smallpic" alt="" /
this works if i pull the image from /temp/userimages/userid/imageNo.ext
but because an OS can segfault if you store too many folders or images in a directory
i have code that assigns the user image to a subdirectory based upon division of a subdir per 1000 userids. so in thise case i have user id 94 whos images get stored in /siteroot/temp/userimages/000000/94/pic_1.jpg (through 10) or tn_1 (through 10).jpg
here is the code for getsnap.php
<?php
ob_start();
if ( !defined( 'SMARTY_DIR' ) ) {
include_once( 'init.php' );
}
include('core/snaps_functions.php');
if (isset($_REQUEST['username']) && $_REQUEST['username'] != '') {
$userid = $osDB-getOne('select id from ! where username = ?',array(USER_TABLE, $_REQUEST['username']) );
} else {
// include ( 'sessioninc.php' );
if( !isset($_GET['id']) || (isset($_GET['id'])&& (int)$_GET['id'] <= 0 ) ) {
$userid = $_SESSION['UserId'];
} else {
$userid = $_GET['id'];
}
}
if (!isset($_GET['picid']) ) {
if ((isset($_REQUEST['type']) && $_REQUEST['type'] != 'gallery') || !isset($_REQUEST['type']) ) {
$defpic = $osDB-getOne('select picno from ! where userid = ? and ( album_id is null or album_id = ?) and default_pic = ? and active = ? ',array(USER_SNAP_TABLE, $userid,'0','Y','Y' ) );
if ($defpic != '') {
$picid = $defpic;
} else {
$picid = $osDB-getOne('select picno from ! where userid = ? and ( album_id is null or album_id = ?) and active=? order by rand()',array(USER_SNAP_TABLE, $userid,'0','Y' ) );
}
unset( $defpic);
}
} else {
$picid = $_GET['picid'];
}
$typ = isset( $_GET['typ'])?$_GET['typ']:'pic' ;
$cond = '';
if ( ($config['snaps_require_approval'] == 'Y' || $config['snaps_require_approval'] == '1') && $userid != $_SESSION['UserId'] ) {
$cond = " and active = 'Y' ";
}
$sql = 'select * from ! where userid = ? and picno = ? '.$cond;
//Get the pic
$row =& $osDB-getRow ( $sql, array( USER_SNAP_TABLE, $userid, $picid ) );
//Okay pic was found in the DB, Lets actually do something
//
$id = $userid;
$dir = str_pad(($id - ($id % 1000))/100000,6,'0',STR_PAD_LEFT);
$zimg = USER_IMAGES_DIR.$dir;
$img = getPicture($zimg, $userid, $picid, $typ, $row);
//$img = getPicture($userid, $picid, $typ, $row);
//$img = getPicture($dir, $userid, $picid, $typ, $row);
$ext = ($typ = 'tn')?$row['tnext']:$row['picext'];
// Now pic is built as
// something pic_x.ext ie pic_2.jpg
if ( $img != '' && ( ( hasRight('seepictureprofile') && ( $config['snaps_require_approval'] == 'Y' && $row['active'] == 'Y' ) ||$config['snaps_require_approval'] == 'N' ) || $userid == $_SESSION['UserId'] ) ) {
$img2 = $img;
//$img2 = $dir.'/'.$img;
} else {
$gender = $osDB-getOne( 'select gender from ! where id = ?', array( USER_TABLE, $userid ) ) ;
if ($gender == 'M') {
$nopic = SKIN_IMAGES_DIR.'male.jpg';
} elseif ($gender == 'F') {
$nopic = SKIN_IMAGES_DIR.'female.jpg';
} elseif ($gender == 'D') {
$nopic = SKIN_IMAGES_DIR.'director.jpg';
}
$img2 = imagecreatefromjpeg($nopic);
$ext = 'jpg';
}
ob_end_clean();
header("Pragma: public");
header("Content-Type: image/".$ext);
header("Content-Transfer-Encoding: binary");
header("Cache-Control: must-revalidate");
$ExpStr = "Expires: " . gmdate("D, d M Y H:i:s", time() - 30) . " GMT";
header($ExpStr);
$id = $userid;
$dir = str_pad(($id - ($id % 1000))/100000,6,'0',STR_PAD_LEFT);
$zimg = USER_IMAGES_DIR.$dir;
//header("Content-Disposition: attachment; filename=profile_".$userid."_".$typ.".".$ext);
//header("Content-Disposition: attachment; filename=$dir.'/'.profile_".$userid."".$typ.".".$ext);
//header("Content-Disposition: attachment; filename=profile"$dir".'/'.".$userid."_".$typ.".".$ext);
header("Content-Disposition: attachment; filename=profile_".$userid."_".$typ.".".$ext);
/*
if ($_SESSION['browser'] != 'MSIE') {
header("Content-Disposition: inline" );
}
*/
if ($ext == 'jpg') {
imagejpeg($img2);
} elseif ($ext == 'gif') {
imagegif($img2);
} elseif ($ext == 'png') {
imagepng($img2);
} elseif ($ext == 'bmp') {
imagewbmp($img2);
}
imagedestroy($img2);
?