Heim >类库下载 >PHP类库 >Lösung des Problems, dass die PHP-Funktion move_uploaded_file Bilder nicht verschieben konnte

Lösung des Problems, dass die PHP-Funktion move_uploaded_file Bilder nicht verschieben konnte

高洛峰
高洛峰Original
2016-10-09 11:25:151605Durchsuche

Beschreibung des Problems:
Heute ist bei der Implementierung eines PHP-Skripts, das Avatar-Bilddateien hochlädt, wenn Benutzer sich registrieren, ein Problem aufgetreten: Das PHP-Skript wurde zuvor ermittelt

Die auf der Browserseite hochgeladene Datei habe mich nicht geirrt.
Die hochgeladene Datei ist legal.
Die hochgeladene Datei ist eine Bilddatei.
Auf der Serverseite wurden eindeutige Dateinamen generiert.
Code
Als nächstes sollten wir die Datei vom temporären Speicherort an den festen Speicherort verschieben, also habe ich das folgende Skript geschrieben:

//Verschiebe die Datei vom temporären Speicherort an den fester Speicherort @move_uploaded_file($_FILES[$image_fieldname]['tmp_name'], $upload_filename) oder handle_error("Fehler beim Speichern der Bilddatei", "Fehler beim Verschieben der Datei" . "{$upload_filename}");
Code handle_error( ) Funktion Es handelt sich um eine von mir definierte Fehlerbehandlungsfunktion. Wenn die Funktion move_uploaded_file einen Fehler ausführt, springt sie zur Fehlerseite. Wenn ich das obige Skript ausführe, springt das Skript offensichtlich zur Fehlerseite . Zuerst habe ich überprüft, ob in meinen Funktionsparametern ein Fehler vorliegt:

$_FILES[$image_fieldname]['tmp_name']$upload_filename //Es ist der Dateipfad, den ich selbst kombiniert habe, garantiert korrekt
Laut PHP-Handbuch sind die beiden oben genannten Parameter garantiert in Ordnung. Auf der Seite werden keine Fehler gemeldet (ich habe den PHP-Operator „@“ vor der Funktion verwendet. (damit die Seite keine Fehler meldet)

@-Operator

Hinweis: Verwenden Sie den @-Operator von PHP in Ihrem Code mit Vorsicht. Der
@-Operator kann alle Probleme aussortieren, die durch Ungültigkeit entstehen können Benutzereingaben oder SQL-Abfragen, die eine falsche Spalte oder sogar einen nicht standardmäßigen URL-Fehler enthalten, können vermieden werden. Der Code prüft möglicherweise nicht einmal auf Fehler, die vom Benutzer, selbst oder dem Entwickler generiert wurden. Kurz gesagt, der @-Operator kann die Fehlermeldung maskieren des Codes verwendet eine beliebte Website oft @, weil sie einfach nicht abstürzen oder stoppen kann, aber in diesem Fall sollten andere Fehlerlösungen verwendet werden.

Suche nach der Fehlerprotokolldatei
Zu diesem Zeitpunkt war mir nicht klar, dass der @-Operator die Fehlermeldung blockierte. Ich wollte nach der Fehlerprotokolldatei von Apache suchen, weil ich ein PHP erstellte Entwicklungsumgebung. Ich habe ein Entwicklungskit wie xampp verwendet, daher unterschied sich die Datei error_log von den meisten Artikeln im Internet. Am Ende habe ich sie in
(mein Host ist Ubuntu)

/ gefunden. opt/lampp/logs
Die Datei „php_error_log“ wurde in diesem Pfad gefunden. In der Datei „php_error_log“ wurde schließlich auch der Fehler gefunden Ort, an dem der Fehler aufgetreten ist: Das Zielverzeichnis, in dem wir die Bilder speichern, hat keine Berechtigungen. Der Benutzer, der das PHP-Skript ausführt, und der Benutzer, der den Skriptcode schreibt und den Bildordner erstellt, sind nicht derselbe Benutzer 🎜>

Tatsächlich müssen wir uns nicht so viel Mühe geben. Wir müssen nur den @-Operator entfernen und dann die Fehlerbehandlungsfunktion handle_error() entfernen, und dann können wir die Fehlermeldung sehen die Webseite.

Ändern Sie die Berechtigungen des Zielordners

Egal was passiert, wir haben immer noch die Ursache des Problems gefunden, was sehr erfreulich ist. Da der Benutzer und die Berechtigungen des Ordners falsch sind, können wir nur Sie müssen diese ändern. Fragen Sie einfach:

Ändern Sie den Benutzer, der den festen Speicherordner für Bilder besitzt, und ändern Sie ihn in den Benutzer, der Apache ausführt, um PHP-Skripte auszuführen.

Ändern Sie die Berechtigungen des Ordners auf 755
Wer ist also der Benutzer, der Apache ausführt? Wir verwenden ein PHP-Skript, um Folgendes zu erhalten:

echo exec('whoami'); //Holen Sie sich die Berechtigung für Führen Sie die Datei „Benutzername“ aus und ändern Sie dadurch die Berechtigungen des Bildordners.

Auf diese Weise habe ich den Benutzer erhalten, der das Skript ausgeführt hat: Daemon. Was Sie erhalten, unterscheidet sich wahrscheinlich von meinem.
Ändern wir den Benutzer, dem der Ordner gehört:

chown daemon -R ~/web/hello_php/uploads

~/web/hello_php/uploads ist der Zielpfad, in dem ich die Bilder speichere, - R Stellt die rekursive Änderung des Benutzers dar, der zu dem Ordner in diesem Verzeichnis gehört.

Dann ändern Sie die Ordnerberechtigungen

chmod 775 -R ~/web/hello_php/uploads

Somit sind wir fertig,

Referenz Lesen Sie: http://www.manongjc.com/article/1494.html


Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn

In Verbindung stehende Artikel

Mehr sehen