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:
<form>
mitmethod="post"
und richtigeenctype
- richtige Datei verwiesen, aus der form
- Verzeichnis hat die Berechtigungen
777
- 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()
stattmove_uploaded_file()
. Auch haben Sie einen Blick auf dieerror.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
imelse
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?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Nur, um zu überprüfen, ist die
post_max_filesize
set zu einem hohen level? Denn laut php.net:Etwas zu prüfen.
weitere Infos finden Sie unter dieser link und scrollen Sie nach unten, um die
post_max_filesize
AbschnittUPDATE
Meiner Erfahrung, wenn Sie mit dem WSOD es ist in der Regel tun, um
error_reporting
unddisplay_errors
ausgeschaltet wird ODER diememory_limit
erreicht wird. Im Skript an der Spitze, die ich in der Regel denmemory_limit
auf 1024M, um zu überprüfen, dass ist nicht das problem und die Wende auferror_reporting
unddisplay_errors
... also setzen Sie diese, bevor Sie die Datei hochladen:Normalerweise entledigt sich der WSOD und gibt Ihnen eine Fehlermeldung, mit zu arbeiten.
UPDATE
Haben Sie versucht, aus der
@
error suppression vor, alle Ihre Funktionen zu sehen, die Sie produzieren eine bestimmte Fehlermeldung? Auch das, was Sie sind Durchführung und Eingabe timeouts? und Können Sie überprüfen, welche Header gesendet werden? (stellen Sie sicher, es istContent-Type=text/html;
)Versuchen Sie, den Ziel-Pfad zu einem nicht temp-Verzeichnis.
Nachdem einige der updates, hier ist die Auflösung:
...fügen Sie diese an den Anfang der Datei, die verarbeitet den upload.
[error] => 1
bedeutet Die hochgeladene Datei überschreitet die upload_max_filesize directive in php.ini.http://www.php.net/manual/en/features.file-upload.errors.php
Also, Sie haben, um Ihre Einstellungen zu ändern.
als für php.ini-Datei, die Sie hier gepostet, aber es wirkt sich nicht auf PHP. Sie haben, um es zu verschieben irgendwo auf richtige Lage
Ich hatte das gleiche problem Letzte Woche, es war nur, weil mein server-Speicherplatz der Festplatte war voll! Ich hoffe, es wird jemand helfen...
Hatte ich dieselben problem, aber ich wollte eine Datei überschreiben, so muss ich löschen Sie die alte Datei und als es funktioniert.