move_uploaded_file nicht funktioniert, keine Fehler

Mir läuft ein Skript ausgeführt, das verschiebt eine hochgeladene Datei mit move_uploaded_file(). Ich habe dies getan, tausend mal, aber aus irgendeinem Grund funktioniert es nicht. Ich habe confimred die folgenden:

  1. <form> mit method="post" und richtige enctype
  2. richtige Datei verwiesen, aus der form
  3. Verzeichnis hat die Berechtigungen 777
  4. alle memory_limit, max_execution_time etc eingestellt sind super-high Einstellungen, um Zeitüberschreitungen zu vermeiden

Grundsätzlich das folgende Skript gibt mit nur Your image is too big.. Ich habe auch aktiviert, ALLE Fehler angezeigt und immer noch nicht erhalten eine Fehlermeldung. Irgendwelche Ideen?

$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>';
}

Mit 1und1 hosting mit php.ini-hack 😛

UPDATE 1

Möchte ich hinzufügen, dass die Antwort aus dem Skript tritt genau nach 60 Sekunden.

UPDATE 2

Wir könnten immer irgendwo mit dabei. Nur print_r($_FILES) und das ist das Ergebnis des Arrays:

Array ( 
    [image] => Array ( 
        [name] => P2120267.JPG 
        [type] => 
        [tmp_name] => 
        [error] => 1 
        [size] => 0 
    ) 
) 

So, der führt mich zu glauben, dass die Datei nicht hochgeladen werden, korrekt an den server oder so? Ich habe geprüft und der post-form <form action="" method="post" enctype="multipart/form-data">. Also, was ich sagen kann, die Datei nicht auf den server hochgeladen werden temp-Bereich?

UPDATE 3

Bemerkt, die [error] => 1 im obigen array. Dies ist anscheinend down zu die filesize wird größer als die upload_max_filesize. Allerdings, wenn ich dies als 128M bekomme ich einen weißen Bildschirm des Todes nach 60 Sekunden. Die Datei, die ich hochladen ist 2,5 MB

Hier ist mein php.ini-Datei:

register_globals=off
memory_limit = 128M 
max_execution_time=3600 
post_max_size = 128M
upload_max_filesize= 128M 

UPDATE 4

Mit details oben, es scheint, dass ich bin immer ein WSOD, aber das Bild wird upoaded. Also, wie stoppen Sie den WSOD? Ich kann nicht finden alle Fehler in Zusammenhang überall.

UPDATE 5 - ES GEFUNDEN!

Schande über mich für nicht so dass Sie den Jungs den code. Es sieht aus wie seine zu tun, mit dieser Zeile:

resizeImage($feedBurnerStatsSource, PHOTOMSGDIR.'temp/'.$time.'-tmp.jpg',$width,$height);

In den folgenden 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 bedeutet, dass es eine Art von sterben, ohne eine Nachricht. Irgendwelche Ideen?

  • Versuchen Sie eine print_r($_FILES); zu sehen, das komplette DATEIEN-array. Es könnte Fehler-code enthalten. Ihre Fehlermeldung nicht wirklich Sinn btw, weil Sie nicht tun, eine Größe zu überprüfen und alle Fehler Zustand zurückkehren wird, "image too big"
  • Datei name kann nicht gültig sein. Ist die Datei key-set?
  • Wenn Sie nicht bekommen, irgendwelche Fehlermeldungen gibt, versuche copy() statt move_uploaded_file(). Auch haben Sie einen Blick auf die error.log in solchen Fällen.
  • Dass target_path sieht besonders seltsam, ist error_reporting auf ?
  • versuchen echo auf $_FILES['image']['tmp_name'] und $target_path im else block zu überprüfen, Pfade sind richtig.
  • wie oben gesehen, das $_FILES array fehlt temp_name. Also was jetzt?
  • Sie haben einen Fehler. Nun ist die Zeit für die Erläuterung. Es ist ziemlich klar.
  • was sagt phpinfo() sagt über diese Werte?
  • Was hat Apache / PHP error log sagen?

InformationsquelleAutor David | 2011-04-13
Schreibe einen Kommentar