Jump to content

Recommended Posts

I have the code I will copy after this lines that I have picked from atwebresults.com.

the code is for picture uploading and works fine almost all the time except when I've been trying to upload big pictures using the ajax upload code.

When I say big, I mean 3000px X 1500px for example.

It doesn't matter how much do I reduce the quality and subsequently the size (tried with a file of only 150kb) the code is unable to finish the job and nothing is uploaded... What can it be?

	
<?php
function uploadImage($fileName, $maxSize, $maxW, $fullPath, $relPath, $colorR, $colorG, $colorB, $maxH = null){
$dir = substr_replace($relPath ,"",-1);
if(mkdir($dir, 0777, true)){
	$folder = $relPath;
	$maxlimit = $maxSize;
	$allowed_ext = "jpg,jpeg,gif,png,bmp";
	$match = "";
	$filesize = $_FILES[$fileName]['size'];
	if($filesize > 0){	
		$filename = strtolower($_FILES[$fileName]['name']);
		$filename = preg_replace('/\s/', '_', $filename);
	   	if($filesize < 1){ 
			$errorList[] = "File size is empty.";
		}
		if($filesize > $maxlimit){ 
			$errorList[] = "File size is too big.";
		}
	    $file_ext = preg_split("/\./",$filename);
		$allowed_ext = preg_split("/\,/",$allowed_ext);
		foreach($allowed_ext as $ext){
			if($ext==end($file_ext)){
   				$match = "1"; // File is allowed
				$NUM = time();
				$front_name = substr($file_ext[0], 0, 15);
				$newfilename = $front_name."_".$NUM.".".end($file_ext);
				$filetype = end($file_ext);
				$save = $folder.$newfilename;
				if(!file_exists($save)){
					list($width_orig, $height_orig) = getimagesize($_FILES[$fileName]['tmp_name']);
					if($maxH == null){
						if($width_orig < $maxW){
							$fwidth = $width_orig;
						}else{
							$fwidth = $maxW;
						}
						$ratio_orig = $width_orig/$height_orig;
						$fheight = $fwidth/$ratio_orig;

						$blank_height = $fheight;
						$top_offset = 0;

					}else{
						if($width_orig <= $maxW && $height_orig <= $maxH){
							$fheight = $height_orig;
							$fwidth = $width_orig;
						}else{
							if($width_orig > $maxW){
								$ratio = ($width_orig / $maxW);
								$fwidth = $maxW;
								$fheight = ($height_orig / $ratio);
								if($fheight > $maxH){
									$ratio = ($fheight / $maxH);
									$fheight = $maxH;
									$fwidth = ($fwidth / $ratio);
								}
							}
							if($height_orig > $maxH){
								$ratio = ($height_orig / $maxH);
								$fheight = $maxH;
								$fwidth = ($width_orig / $ratio);
								if($fwidth > $maxW){
									$ratio = ($fwidth / $maxW);
									$fwidth = $maxW;
									$fheight = ($fheight / $ratio);
								}
							}
						}
						if($fheight == 0 || $fwidth == 0 || $height_orig == 0 || $width_orig == 0){
							die("FATAL ERROR REPORT ERROR CODE [add-pic-line-67-orig] to <a href='http://www.atwebresults.com'>AT WEB RESULTS</a>");
						}
						if($fheight < 45){
							$blank_height = 45;
							$top_offset = round(($blank_height - $fheight)/2);
						}else{
							$blank_height = $fheight;
						}
					}
					$image_p = imagecreatetruecolor($fwidth, $blank_height);
					$white = imagecolorallocate($image_p, $colorR, $colorG, $colorB);
					imagefill($image_p, 0, 0, $white);
					switch($filetype){
						case "gif":
							$image = @imagecreatefromgif($_FILES[$fileName]['tmp_name']);
						break;
						case "jpg":
							$image = @imagecreatefromjpeg($_FILES[$fileName]['tmp_name']);
						break;
						case "jpeg":
							$image = @imagecreatefromjpeg($_FILES[$fileName]['tmp_name']);
						break;
						case "png":
							$image = @imagecreatefrompng($_FILES[$fileName]['tmp_name']);
						break;
					}
					@imagecopyresampled($image_p, $image, 0, $top_offset, 0, 0, $fwidth, $fheight, $width_orig, $height_orig);
					switch($filetype){
						case "gif":
							if(!@imagegif($image_p, $save)){
								$errorList[]= "PERMISSION DENIED [GIF]";
							}
						break;
						case "jpg":
							if(!@imagejpeg($image_p, $save, 100)){
								$errorList[]= "PERMISSION DENIED [JPG]";
							}
						break;
						case "jpeg":
							if(!@imagejpeg($image_p, $save, 100)){
								$errorList[]= "PERMISSION DENIED [JPEG]";
							}
						break;
						case "png":
							if(!@imagepng($image_p, $save, 0)){
								$errorList[]= "PERMISSION DENIED [PNG]";
							}
						break;
					}
					@imagedestroy($filename);
				}else{
					$errorList[]= "CANNOT MAKE IMAGE IT ALREADY EXISTS";
				}	
			}
		}		
	}else{
		$errorList[]= "NO FILE SELECTED";
	}
	if(!$match){
	   	$errorList[]= "File type isn't allowed: $filename";
	}
	if(sizeof($errorList) == 0){
		return $fullPath.$newfilename;
	}else{
		$eMessage = array();
		for ($x=0; $x<sizeof($errorList); $x++){
			$eMessage[] = $errorList[$x];
		}
	   	return $eMessage;
	}
}

$filename = strip_tags($_REQUEST['filename']);
$maxSize = strip_tags($_REQUEST['maxSize']);
$maxW = strip_tags($_REQUEST['maxW']);
$fullPath = strip_tags($_REQUEST['fullPath']);
$relPath = strip_tags($_REQUEST['relPath']);
$colorR = strip_tags($_REQUEST['colorR']);
$colorG = strip_tags($_REQUEST['colorG']);
$colorB = strip_tags($_REQUEST['colorB']);
$maxH = strip_tags($_REQUEST['maxH']);

$filesize_image = $_FILES[$filename]['size'];
if($filesize_image > 0){
	$upload_image = uploadImage($filename, $maxSize, $maxW, $fullPath, $relPath, $colorR, $colorG, $colorB, $maxH);
	if(is_array($upload_image)){
		foreach($upload_image as $key => $value) {
			if($value == "-ERROR-") {
				unset($upload_image[$key]);
			}
		}
		$document = array_values($upload_image);
		for ($x=0; $x<sizeof($document); $x++){
			$errorList[] = $document[$x];
		}
		$imgUploaded = false;
	}else{
		$imgUploaded = true;
	}
}else{
	$imgUploaded = false;
	$errorList[] = "File Size Empty";
}
}
?>
<?php
if($imgUploaded){
	echo '<img src="images/success.gif" width="16" height="16" border="0" style="marin-bottom: -4px;" /> Success!<br /><img src="'.$upload_image.'" border="0" />';
}else{
	echo '<img src="images/error.gif" width="16" height="16px" border="0" style="marin-bottom: -3px;" /> Error(s) Found: ';
	foreach($errorList as $value){
    		echo $value.', ';
	}
}
?>

 

Hello again, I found the solution myself but I have a new question regarding the topic.

First of all, the problem was the memory used during the resizing process, the best option is to increase the memory available only for the task so I added this line in the fucntion:

ini_set('memory_limit', '64M');

Now it works fine for me but here comes the next doubt:

Cause users have the right to upload whatever picture they want to my website it may happen that 64mb want be enough for some enormeous pictures and I would like my uploading function to catch the out of memory warning to return a personal and formated message...

I don't think this is possible as the PHP engine has terminated when the memory has been exhausted. In other words there is no memory left to do anything.

 

Set the memory limit to a high amount or use imagemagick for image manipulation rather than the GD functions in PHP.

This thread is more than a year old. Please don't revive it unless you have something important to add.

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

×
×
  • Create New...

Important Information

We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.