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?
Just to verify is the
post_max_filesize
set to a high level? Because according to php.net:Something to consider.
for more info see this link and scroll down to the
post_max_filesize
sectionUPDATE
In my experience if you're getting a WSOD it's usually do to
error_reporting
anddisplay_errors
being turned off OR thememory_limit
being reached. In the script at the top I usually set thememory_limit
to 1024M to verify that isn't the problem and the turn onerror_reporting
anddisplay_errors
... so put this before the file upload:That normally gets rid of the WSOD and gives you and error to work with.
UPDATE
Have you tried taking off the
@
error suppression in front of all your functions to see they are producing a specific error? Also what are you execution and input timeouts? and Can you verify what headers are being sent? (make sure it isContent-Type=text/html;
)[error] => 1
means The uploaded file exceeds the upload_max_filesize directive in php.ini.http://www.php.net/manual/en/features.file-upload.errors.php
So, you have to change your settings.
as for the php.ini file you posted here, it just doesn't affect your PHP. you have to move it somewhere to more proper location
I had the same problem last week, it was just because my server space disk was full! I hope it will help someone...
Try changing the target path to a non temp directory.
After some of the updates here is the resolution:
...add this to the beginning of your file that processes the upload.
I had same problem, but I wanted to overwrite a file, so I have to delete old file and than it works.