Ich versuche, eine Datei mit PHP in einem anderen Ordner hochgeladen zu bewegen, aber irgendwie wird dies nicht funktionieren, was zu:PHP: Datei kann nicht andere Ordner verschieben
move_uploaded_file(upload/tmp/phpxEGMLG): failed to open stream: Permission denied
Also, anscheinend Ich habe keine richtigen Berechtigungen für upload/tmp
(die in der Tat ist /var/www/html/upload/tmp
).
Ich habe Berechtigungen auf 777
und Besitzer root:root
für /var/www/html/upload/tmp
gesetzt, um absolut sicher zu sein, dass es kein Problem geben konnte.
Aber das war es nicht lösen ...
Andere Dinge, die ich habe versucht:
- Set Besitzer
apache:apache
- Quelle ändern Dateiberechtigungen
777
und Besitzerroot
(standardmäßig Besitzer wird aufapache
) - Überprüfung PHP-Einstellungen (ziemlich Standard,
/var/www/html
und/tmp
innerhalbopen_basedir
sind, istupload_tmp_dir
nicht festgelegt) + l ogs - Überprüfen Apache Einstellungen + Protokolle
- Verschieben der Datei im selben Ordner -> das funktioniert!
- bewegen es in einem anderen anderen Ordner -> nicht
- funktioniert Einstellung alle übergeordneten Verzeichnisse
777
und Inhaberroot
oderapache
Und ich erstellt ein Testskript:
<?php
echo 'TESTING FILE MOVE' . '<br><br>';
echo getcwd() . '<br>';
echo get_current_user() . '<br>';
error_reporting(E_ALL);
file_put_contents('/tmp/tst.txt', 'this is a test');
chdir('/var/www/html/upload/tmp');
echo getcwd() . '<br><br>';
rename('/tmp/tst.txt', 'tst-2.txt');
print_r(error_get_last());
Es gibt eine Ausgabe wie:
TESTDATEI MOVE
/var/www/html
root
/var/www/html/upload/tmpArray ([Typ] => 2 [message] => Umbenennen (/tmp/tst.txt , tst-2.txt): Zugriff verweigert [file] => /var/www/html/test.php [line] => 13)
das sagt mir, unter welcher Benutzer das Skript ausgeführt wird und Ich bin im richtigen Verzeichnis. Es werden auch die zusätzlichen Prüfungen move_uploaded_file
verwendet, die sich auf das Verschieben der Datei konzentrieren.
Einige Informationen über mein Setup:
- CentOS 7
- PHP 7.1
- PHP-FPM
- Apache 2.4.6
Es verwendet ein separates Temp-Verzeichnis für PHP-FPM, wie /tmp/systemd-private-xxxx-php71-php-fpm.service-yyyy/tmp/
. Vielleicht gibt es einen Grund, warum es Dateien außerhalb dieses Verzeichnisses nicht verschieben kann? Ich kann jedoch nichts dabei finden ...
Ich hoffe, jemand kann mir einen Hinweis, was könnte los sein!
'www-data' nicht auf CentOS nicht existiert, es' apache' dort genannt wird, aber diese Befehle mit 'apach Ausführung e' statt 'www-data' löst es nicht ... – kasimir