2009-06-13 7 views
0

Ich habe einen bizarren Fehler, den ich einfach nicht verstehen kann. Meine Website funktionierte auf einem Server, aber als ich sie auf einen neuen Server übertragen hatte, funktionierte sie nicht mehr. Ich glaube, dass ich den Fehler verengt habe bis zu dieser Codezeile:move_uploaded_file hängt?

$ret = move_uploaded_file($tmp_name, $orig_path); 

Diese durch einen AJAX-Aufruf ausgeführt wird, so ist es ein wenig zu debuggen schwierig, aber das Skript kann einen Fehlercode zurückschicken und dann meine JavaScript wird alert es. So habe ich es in zwei dieser Debug-Anweisungen eingewickelt:

echo json_encode(array(

    'success' => false, 

    'errno' => $tmp_name.' -> '.$orig_path, 

)); 

exit; 



$ret = move_uploaded_file($tmp_name, $orig_path); 



echo json_encode(array(

    'success' => false, 

    'errno' => 'no error', 

)); 

exit; 

Die erste funktioniert gut und spuckt etwas wie:

error /tmp/phpk3RICU -> /home/username/Websites/website/photos/o/2-4a3354dd017a9.jpg 

Vielleicht bin ich ein bisschen von einem Linux noob, aber ich kann nicht wirklich /tmp/phpk3RICU auf meinem System finden (wird es gelöscht, sobald das Skript beendet wird oder was?). Mehr dazu in einer Sekunde.

Wenn ich die erste Debug-Überprüfung lösche und move_uploaded_file laufen lassen, scheint die zweite Debug-Prüfung nie ausgeführt zu werden, was zu der Annahme führt, dass move_uploaded_file hängen bleibt.

Wenn ich statt $tmp_name eine Datei verwende Ich kenne existiert nicht, dann wird die zweite Prüfung ausgeführt. Also ... es scheint, als ob es diese tmp-Datei nicht einfach verschieben möchte, aber es meldet keinen Fehler.

Ich habe eine neue Installation des LAMP-Stacks auf meinem Unbutu-Rechner installiert, der über apt-get installiert wurde ... lassen Sie es mich wissen, wenn Sie weitere Informationen benötigen.

Oh .. und weiß nicht, ob es relevant ist, aber die Datei wird durch Flash hochgeladen.

+0

mkdir scheitert auch tatsächlich ...scheint keine Dateien zu erstellen und gibt keinen Fehler aus. – mpen

Antwort

0

Ugh. Das Problem war mit Berechtigungen. 755 war genug auf dem anderen Server, aber nicht für diesen Server scheint es ... nicht wirklich sicher warum, ich denke, PHP läuft unter einem anderen Benutzer? Ich bin mir nicht wirklich sicher, wie das ganze Permissions-Zeug funktioniert. Was mich wirklich erschüttert ist, warum mkdir und move_uploaded_file nicht fehlschlugen und falsch zurückliefern ...

1

Laden Sie die Datei über den AJAX-Aufruf hoch? Hochgeladene Dateien werden gelöscht, sobald das Skript, zu dem Sie sie hochgeladen haben, beendet wird - deshalb können Sie es nicht in/tmp finden.

1

Try PHP sagen alle Fehler ausspucken:

error_reporting(E_ALL); 

Es könnte eine Konfiguration Diskrepanz sein, dass es auf einem der Server bricht. Von der move_uploaded_file()manual Seite:

Hinweis: move_uploaded_file() ist sowohl abgesicherter Modus und open_basedir bewusst. Allerdings werden nur auf dem Zielpfad Einschränkungen auferlegt, um das Verschieben von hochgeladenen Dateien zu ermöglichen, in denen Dateiname mit solchen Einschränkungen kollidieren kann. move_uploaded_file() gewährleistet die Sicherheit dieser Operation , indem nur die Dateien über PHP verschoben werden erlaubt verschoben werden.