Ich bekomme immer wieder diese Fehlermeldung, wenn ich versuche, das Upload-Verzeichnis mit Apache 2.2 und PHP 5.3 unter CentOS zu konfigurieren.
In der 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 tue, ich erhalte immer wieder die Fehlermeldung PHP beim Hochladen der Datei:
Warnung: move_uploaded_file (images/robot.jpg): Fehler beim Öffnen des Streams: Berechtigung in /var/www/html/mysite/process.php in Zeile 78 verweigert
Warnung: move_uploaded_file (): Verschieben von '/ tmp/phpsKD2Qm' nach 'images/robot.jpg' in /var/www/html/mysite/process.php in Zeile 78 nicht möglich
Wie Sie sehen, wurde die Konfiguration für die Upload-Datei nie aus der Datei php.ini übernommen.
Was mache ich hier falsch?
Dies liegt daran, dass images
und tmp_file_upload
sind nur für root
Benutzer beschreibbar. Damit das Hochladen funktioniert, müssen wir den Eigentümer dieser Ordner mit dem Eigentümer des httpd-Prozesses identisch machen OR global beschreibbar machen (schlechte Vorgehensweise).
$ps aux | grep httpd
. Die erste Spalte ist in der Regel der Eigentümer. Es ist nobody
.Ändern Sie den Besitzer von images
und tmp_file_upload
um nobody
zu werden oder was auch immer der Besitzer ist, den Sie in Schritt 1 gefunden haben.
$Sudo chown nobody /var/www/html/mysite/images/
$Sudo chown nobody /var/www/html/mysite/tmp_file_upload/
Chmod images
und tmp_file_upload
jetzt vom Eigentümer beschreibbar, falls erforderlich [Scheint, dass Sie dies bereits eingerichtet haben]. Erwähnt in @Dmitry Teplyakov Antwort.
$ Sudo chmod -R 0755 /var/www/html/mysite/images/
$ Sudo chmod -R 0755 /var/www/html/mysite/tmp_file_upload/
Weitere Informationen zu diesem Problem finden Sie im Handbuch http://php.net/manual/en/ini.core.php#ini.upload-tmp-dir . Beachten Sie, dass auch darüber gesprochen wird open_basedir
Richtlinie.
Sie können dieses Skript auch ausführen, um den Eigentümer des Apache-Prozesses zu ermitteln:
<?php echo exec('whoami'); ?>
Ändern Sie dann den Eigentümer des Zielverzeichnisses in das, was Sie haben. Verwenden Sie den Befehl:
chown user destination_dir
Und dann benutze den Befehl
chmod 755 destination_dir
um die Zielverzeichnisberechtigung zu ändern.
Wenn Sie Mac OS X verwenden, wechseln Sie zum Dateistamm oder zum Ordner Ihrer Website.
Klicken Sie dann mit der rechten Maustaste darauf, um Informationen abzurufen, gehen Sie ganz nach unten (Sharing & Permissions), öffnen Sie das, und ändern Sie alles Schreibgeschützte in Lesen und Schreiben. Öffnen Sie das Vorhängeschloss, gehen Sie zum Einstellungssymbol und wählen Sie Übernehmen für die beigefügten Elemente ...
Ändern Sie die Berechtigungen für diesen Ordner
# chmod -R 0755 /var/www/html/mysite/images/
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:
chcon -R --type httpd_sys_rw_content_t /path/to/your/directory
Zusammen mit dem Erteilen Ihrer Webserver-Benutzerberechtigungen entweder durch Gruppieren oder Ändern des Besitzers des Verzeichnisses.
Das hat bei mir funktioniert.
Sudo adduser <username> www-data
Sudo chown -R www-data:www-data /var/www
Sudo chmod -R g+rwX /var/www
Dann abmelden oder neu starten.
Wenn sich SELinux
beschwert, versuchen Sie Folgendes
Sudo semanage fcontext -a -t httpd_sys_rw_content_t '/var/www(/.*)?'
Sudo restorecon -Rv '/var/www(/.*)?'
Ich bin auf dieses verwandte Problem gestoßen, obwohl ich den Komponisten bereits erfolgreich ausgeführt habe. Ich habe den Komponisten aktualisiert und beim Ausführen von composer install
oder php composer.phar install
Ich habe:
... Stream konnte nicht geöffnet werden: Berechtigung verweigert ...
Nach langem Nachforschen stellte sich heraus, dass die vorherigen Antworten bezüglich der Änderung der Berechtigungen für den Ordner funktioniert haben. Es handelt sich nur um leicht unterschiedliche Verzeichnisse.
In meiner Installation unter OS X befindet sich die Cache-Datei in /Users/[USER]/.composer/cache
, und ich hatte Probleme, weil die Cache-Datei im Besitz von root war. Das Problem wurde behoben, indem ich rekursiv den Besitz von ".composer" an meinen Benutzer wechselte.
Das habe ich gemacht:
Sudo chown -R [USER] cache
Dann habe ich die composer erneut installiert und voila!
Versuche dies:
öffnen Sie/etc/Apache2/envvars
Sudo gedit /etc/Apache2/envvars
ersetze www-data
mit Ihrer your_username
"export Apache_RUN_USER=www-data"
ersetzen mit
export Apache_RUN_USER='your_username'
Dieses Problem tritt auf, wenn der Apache-Benutzer (www-data) nicht berechtigt ist, in den Ordner zu schreiben. 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 <?php echo exec('whoami'); ?>
aus, um den von Apache verwendeten Benutzer zu ermitteln. Führen Sie anschließend die folgenden Befehle im Terminal aus:
[email protected]:/# cd /var/www/html
[email protected]:/var/www/html# ls -l
Es wird so etwas zurückgegeben:
total of files
drwxr-xr-x 7 user group size date folder
Ich behielt den Benutzer aber änderte die Gruppe zu WWW-Daten
chown -R user:www-data yourprojectfoldername
chmod 775 yourprojectfoldername
Ändern Sie einfach die Berechtigung von tmp_file_upload in 755. Es folgt der Befehl chmod -R 755 tmp_file_upload
Die Lösung ist so einfach. Klicken Sie nur mit der rechten Maustaste auf den Ordner IMAGE (Ziel), wechseln Sie zu den Eigenschaften, klicken Sie auf die Registerkarte "Berechtigung" und ändern Sie den Zugriff anderer Benutzer auf Dateien erstellen und löschen.
Versuche dies
find /var/www/html/mysite/images/ -type f -print0 | xargs -0 chmod -v 664