it-swarm.com.de

move_uploaded_file gibt nach allen vorgenommenen Konfigurationen den Fehler "Fehler beim Öffnen des Streams: Berechtigung verweigert" aus

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?

133
user63898

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).

  1. Überprüfen Sie den Eigentümer des Apache-Prozesses: $ps aux | grep httpd. Die erste Spalte ist in der Regel der Eigentümer. Es ist nobody.
  2. Ä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/
    
  3. 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/
    
  4. 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.

174
Laith Shadeed

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.

69
twlkyao

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 ...

16

Ändern Sie die Berechtigungen für diesen Ordner

# chmod -R 0755 /var/www/html/mysite/images/

11

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.

10
Chris

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(/.*)?'
8
Junius L.

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!

7
abaumer

Versuche dies:

  1. öffnen Sie/etc/Apache2/envvars

    Sudo gedit /etc/Apache2/envvars
    
  2. ersetze www-data mit Ihrer your_username

    "export Apache_RUN_USER=www-data" 
    

    ersetzen mit

    export Apache_RUN_USER='your_username' 
    
6
redrider

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
5

Ändern Sie einfach die Berechtigung von tmp_file_upload in 755. Es folgt der Befehl chmod -R 755 tmp_file_upload

3
Sarang

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.

2
Basim

Versuche dies

find /var/www/html/mysite/images/ -type f -print0 | xargs -0 chmod -v 664

2
Simone