I am running running a script which moves an uploaded file with move_uploaded_file()
. I have done this thousands of times but for some reason it's not working. I have confimred the following:
<form>
usingmethod="post"
and correctenctype
- correct file referenced from form
- directory has permissions
777
- all the
memory_limit
,max_execution_time
, etc are set to super high settings to avoid timeouts
Basically, the script below returns with just Your image is too big.
. I have also enabled ALL errors to display and still don't get an error. Any ideas?
$time = time();
$target_path = "/absolute/path/to/temp/directory/temp/";
$target_path = $target_path.$time.'.jpg';
if(move_uploaded_file($_FILES['image']['tmp_name'], $target_path)) {
} else{
$error .= '<li>Your image is too big.</li>';
}
Using 1and1 hosting with the php.ini hack :P
UPDATE 1
I would like to add that response from the script occurs exactly after 60 seconds.
UPDATE 2
We might be getting somewhere with this. Just print_r($_FILES)
and this is the result of the array:
Array (
[image] => Array (
[name] => P2120267.JPG
[type] =>
[tmp_name] =>
[error] => 1
[size] => 0
)
)
So that leads me to believe that the file isn't be uploaded correctly to the server or something? I have checked and the post form is <form action="" method="post" enctype="multipart/form-data">
. So, from what I can tell, the file isn't being uploaded to the server's temp area?
UPDATE 3
Noticed the [error] => 1
in the above array. This is apparently down to the filesize being larger than the upload_max_filesize
. However, when i set this as 128M
, I get a white screen of death after 60 seconds. The file I'm uploading is 2.5MB
Here is my php.ini file:
register_globals=off
memory_limit = 128M
max_execution_time=3600
post_max_size = 128M
upload_max_filesize= 128M
UPDATE 4
With details above, it appears that I am getting a WSOD, but the image is being upoaded. So, how to stop the WSOD? I can't find any errors related anywhere.
UPDATE 5 - FOUND IT!
Shame on me for not giving you guys all the code. It looks like its to do with this line:
resizeImage($feedBurnerStatsSource, PHOTOMSGDIR.'temp/'.$time.'-tmp.jpg',$width,$height);
In the following code:
function resizeImage($source, $destination = NULL,$wdt, $height = NULL){
if(empty($height)){
// Height is nit set so we are keeping the same aspect ratio.
list($width, $height) = getimagesize($source);
if($width > $height){
$w = $wdt;
$h = ($height / $width) * $w;
$w = $w;
}else{
$w = $wdt;
$h = $w;
$w = ($width / $height) * $w;
}
}else{
// Both width and Height are set.
// this will reshape to the new sizes.
$w = $wdt;
$h = $height;
}
$source_image = @file_get_contents($source) or die('Could not open'.$source);
$source_image = @imagecreatefromstring($source_image) or die($source.' is not a valid image');
$sw = imagesx($source_image);
$sh = imagesy($source_image);
$ar = $sw/$sh;
$tar = $w/$h;
if($ar >= $tar){
$x1 = round(($sw - ($sw * ($tar/$ar)))/2);
$x2 = round($sw * ($tar/$ar));
$y1 = 0;
$y2 = $sh;
}else{
$x1 = 0;
$y1 = 0;
$x2 = $sw;
$y2 = round($sw/$tar);
}
$slate = @imagecreatetruecolor($w, $h) or die('Invalid thumbnail dimmensions');
imagecopyresampled($slate, $source_image, 0, 0, $x1, $y1, $w, $h, $x2, $y2);
// If $destination is not set this will output the raw image to the browser and not save the file
if(!$destination) header('Content-type: image/jpeg');
@imagejpeg($slate, $destination, 75) or die('Directory permission problem');
ImageDestroy($slate);
ImageDestroy($source_image);
if(!$destination) exit;
return true;
}
So, WSOD means that its some sort of die without a message. Any ideas?