move_uploaded_file doesn't work, no error

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:

  1. using method="post" and correct enctype
  2. correct file referenced from form
  3. directory has permissions 777
  4. 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 .= '
  • Your image is too big.
  • '; }

    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

    . 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?

    7
    задан Josh 4 November 2011 в 12:23
    поделиться