Ich erhalte immer wieder diesen Fehler, wenn ich versuche, das Upload-Verzeichnis mit Apache 2.2 und PHP 5.3 unter CentOS zu konfigurieren.
In php.ini:
upload_tmp_dir = /var/www/html/mysite/tmp_file_upload/
In httpd.conf:
Directory /var/www/html/mysite/tmp_file_upload/>
Options -Indexes
AllowOverride None
Order allow,deny
Allow from all
</Directory>
<Directory /var/www/html/mysite/images/>
Options -Indexes
</Directory>
CentOS-Verzeichnisberechtigungen:
drwxrwxr-x 2 root root 4096 Nov 11 10:01 images
drwxr-xr-x 2 root root 4096 Nov 12 04:54 tmp_file_upload
Egal was ich mache, ich erhalte immer wieder diesen Fehler von PHP, wenn ich die Datei hochlade:
Warnung: move_uploaded_file (images / robot.jpg): Stream konnte nicht geöffnet werden: Berechtigung in /var/www/html/mysite/process.php in Zeile 78 verweigert
Warnung: move_uploaded_file (): '/ tmp / phpsKD2Qm' kann nicht in 'images / robot.jpg' in /var/www/html/mysite/process.php in Zeile 78 verschoben werden
Wie Sie sehen, wurde die Konfiguration der Datei php.ini für die Upload-Datei nie übernommen.
Was mache ich hier falsch?
php
upload
file-permissions
user63898
quelle
quelle
Antworten:
Dies liegt daran
images
undtmp_file_upload
ist nur für denroot
Benutzer beschreibbar . Damit das Hochladen funktioniert, müssen wir den Eigentümer dieser Ordner mit dem Eigentümer des httpd-Prozesses identisch machen ODER sie global beschreibbar machen (schlechte Praxis).$ps aux | grep httpd
. Die erste Spalte ist normalerweise der Eigentümernobody
Ändern Sie den Eigentümer von
images
undtmp_file_upload
werden Sienobody
oder was auch immer der Eigentümer ist, den Sie in Schritt 1 gefunden haben.Chmod
images
undtmp_file_upload
jetzt vom Eigentümer beschreibbar, falls erforderlich [Scheint, dass Sie dies bereits installiert haben]. Erwähnt in der Antwort von @Dmitry Teplyakov.Weitere Informationen dazu, warum dieses Verhalten aufgetreten ist, finden Sie im Handbuch http://php.net/manual/en/ini.core.php#ini.upload-tmp-dir . Beachten Sie, dass es sich auch um eine
open_basedir
Direktive handelt.quelle
jacob
(ich als mein lokaler Computer) und die Ordner haben alle755
oder775
.sudo service httpd restart
nachdem ich die Berechtigungen geändert hatte. Dann hat es funktioniert :) Anstatt den Besitzer zu wechseln,chown
fügte ich meinen Apache-Prozess einer 'www'-Gruppe hinzu und fügte diese Verzeichnisse derselben' www'-Gruppe hinzuchgrp
Sie können dieses Skript auch ausführen, um den Eigentümer des Apache-Prozesses herauszufinden:
<?php echo exec('whoami'); ?>
Ändern Sie dann den Eigentümer des Zielverzeichnisses in das, was Sie haben. Verwenden Sie den Befehl:
Und dann benutze den Befehl
um die Berechtigung des Zielverzeichnisses zu ändern.
quelle
<?php echo exec('whoami'); ?>
. Weiß jemand warum?exec('whoami')
. Hat mir noch 30 Minuten gespart. war Ubuntu Benutzer chowningwww-data
? in der RegelWenn Sie Mac OS X haben, wechseln Sie zum Dateistammverzeichnis oder zum Ordner Ihrer Website.
Klicken Sie dann mit der rechten Maustaste darauf, gehen Sie, um Informationen zu erhalten, gehen Sie ganz nach unten ( Freigabe und Berechtigungen ), öffnen Sie diese und ändern Sie alle schreibgeschützten Elemente in Lesen und Schreiben. Stellen Sie sicher, dass Sie das Vorhängeschloss öffnen, zum Einstellungssymbol gehen und auf Auf die beiliegenden Elemente anwenden wählen ...
quelle
/private/var/tmp
auf meinem Mac geändert habe.Das hat bei mir funktioniert.
Dann abmelden oder neu starten.
Wenn Sie sich
SELinux
beschweren, versuchen Sie Folgendesquelle
Ich wollte dies zu den vorherigen Vorschlägen hinzufügen. Wenn Sie eine Linux-Version verwenden, für die SELinux aktiviert ist, sollten Sie dies auch in einer Shell ausführen:
Zusammen mit der Erteilung von Benutzerberechtigungen für Ihren Webserver entweder durch Gruppen oder durch Ändern des Eigentümers des Verzeichnisses.
quelle
restorecon -R -v /path/to/your/directory
muss wahrscheinlich auch danach einbezogen werden. access.redhat.com/documentation/en-US/Red_Hat_Enterprise_Linux/…Ändern Sie die Berechtigungen für diesen Ordner
# chmod -R 0755 /var/www/html/mysite/images/
quelle
Versuche dies:
öffne / etc / apache2 / envvars
durch
www-data
dein ersetzenyour_username
ersetzen mit
quelle
Ich bin auf dieses Problem gestoßen, obwohl ich Composer bereits erfolgreich ausgeführt habe. Ich habe den Komponisten aktualisiert und beim Laufen
composer install
oderphp composer.phar install
ich habe:Nach langem Suchen stellte sich heraus, dass die vorherigen Antworten zum Ändern der Berechtigungen für den Ordner funktionierten. Sie sind jetzt nur geringfügig andere Verzeichnisse.
Bei meiner Installation unter OS X befindet sich die Cache-Datei in
/Users/[USER]/.composer/cache
und ich hatte Probleme, da die Cache-Datei im Besitz von root war. Das rekursive Ändern des Besitzers von '.composer' auf meinen Benutzer hat das Problem behoben.Das habe ich getan:
Dann habe ich die Composer-Installation erneut ausgeführt und voila!
quelle
Dieses Problem tritt auf, wenn der Apache-Benutzer (www-data) keine Berechtigung zum Schreiben in den Ordner hat. Um dieses Problem zu lösen, müssen Sie den Benutzer in die Gruppe www-data einfügen.
Ich habe gerade Folgendes gemacht:
Führen Sie diesen PHP-Code aus
<?php echo exec('whoami'); ?>
, um den von Apache verwendeten Benutzer zu ermitteln. Führen Sie anschließend die folgenden Befehle im Terminal aus:Es wird ungefähr so etwas zurückgeben:
Ich habe den Benutzer behalten, aber die Gruppe in www-data geändert
quelle
Die Lösung ist so einfach. Klicken Sie nur mit der rechten Maustaste auf den Ordner IMAGE (Ziel), gehen Sie zu den Eigenschaften, klicken Sie auf die Registerkarte Berechtigung und ändern Sie den Zugriff anderer auf Dateien erstellen und löschen .
quelle
Ändern Sie einfach die Berechtigung von tmp_file_upload in 755. Es folgt der Befehl chmod -R 755 tmp_file_upload
quelle
Versuche dies
find /var/www/html/mysite/images/ -type f -print0 | xargs -0 chmod -v 664
quelle