it-swarm.com.de

Wie gebe ich? PHP Schreibzugriff auf ein Verzeichnis?

Ich versuche mit PHP eine Datei zu erstellen, aber es funktioniert nicht. Ich gehe davon aus, dass es keinen Schreibzugriff gibt (es war schon immer das Problem). Ich habe versucht zu testen, ob dies das Problem war, indem ich den Ordner chmod 0777 erstellte, aber das führte dazu, dass jedes Skript in diesem Verzeichnis eine 500-Fehlermeldung zurückgegeben hat, bis ich es wieder geändert habe .. Wie gebe ich PHP Schreibzugriff auf mein Dateisystem, damit eine Datei erstellt werden kann?

Bearbeiten: Es wird auf Hostgator Shared Hosting mit Apache gehostet.

Edit 2: Jemand hat nach dem Code gefragt: Der Code ist ein Gd-Image-Skript. Ich weiß, dass der Rest so funktioniert wie zuvor, als ich das Bild jedes Mal erstellt habe, in dem es heißt. Jetzt versuche ich, sie zu erstellen, wenn neuer Text hinzugefügt wird, und speichere sie in einem Ordner. Die Schreibzeile, die ich habe, ist: Imagejpeg (null, $ file, 85);

Ich habe auch eine Testdatei erstellt, um zu prüfen, ob es sich nur um ein defektes Skript handelt (hauptsächlich von tizag kopiert): http://gearboxshow.info/rkr/lesig.jpg/testfile.txt ( Ich weiß nicht, ob/wie der Code hier richtig veröffentlicht wird. Hier ist der Inhalt des Skripts PHP, minus PHP -Tags.)

Es gibt 13,13,1 (separate Zeilen) zurück, es sieht also so aus, als ob es denkt, es hätte etwas geschrieben, aber die testfile.txt ist leer (ich habe eine leere hochgeladen) oder nicht vorhanden (wenn ich sie lösche).

Edit 3: Der Server führt CentOS aus.

64

Eine sehr einfache Möglichkeit ist, das Verzeichnis selbst von PHP erstellen zu lassen.

<?php
 $dir = 'myDir';

 // create new directory with 744 permissions if it does not exist yet
 // owner will be the user/group the PHP script is run under
 if ( !file_exists($dir) ) {
     mkdir ($dir, 0744);
 }

 file_put_contents ($dir.'/test.txt', 'Hello File');

Dies erspart Ihnen den Ärger mit Berechtigungen.

50
favo

Stellen Sie den Besitzer des Verzeichnisses auf den Benutzer ein, auf dem Apache ausgeführt wird. Oft ist niemand unter Linux

chown nobody:nobody <dirname>

Auf diese Weise wird Ihr Ordner nicht weltweit beschreibbar sein, aber für Apache noch beschreibbar :)

33
Thomas Winsnes

Einfache 3-Schritt-Lösung

Abstract: Sie müssen den Besitzer des Verzeichnisses auf den Benutzer setzen, den PHP verwendet (Webserver-Benutzer).


Schritt 1: Bestimmen Sie PHP Benutzer

Erstellen Sie eine PHP Datei, die Folgendes enthält:

<?php echo `whoami`; ?>

Laden Sie es auf Ihren Webserver hoch. Die Ausgabe sollte der folgenden ähneln:

www-data

Daher ist der Benutzer PHP www-data.


Schritt 2: Bestimmen Sie den Besitzer des Verzeichnisses

Überprüfen Sie als Nächstes die Details des Webverzeichnisses über die Befehlszeile:

ls -dl /var/www/example.com/public_html/example-folder

Das Ergebnis sollte dem folgenden ähnlich sein:

drwxrwxr-x 2 exampleuser1 exampleuser2 4096 Mar 29 16:34 example-folder

Daher ist der Besitzer des Verzeichnisses exampleuser1.


Schritt 3: Ändern Sie den Verzeichnisbesitzer in PHP User

Ändern Sie anschließend den Besitzer des Webverzeichnisses in den Benutzer PHP:

Sudo chown -R www-data /var/www/example.com/public_html/example-folder

Stellen Sie sicher, dass der Besitzer des Webverzeichnisses geändert wurde:

ls -dl /var/www/example.com/public_html/example-folder

Das Ergebnis sollte dem folgenden ähnlich sein:

drwxrwxr-x 2 www-data exampleuser2 4096 Mar 29 16:34 example-folder

Daher wurde der Besitzer von example-folder erfolgreich in den Benutzer PHP geändert: www-data.


Erledigt! PHP sollte jetzt in das Verzeichnis schreiben können.

8
Grant Miller

Ermitteln Sie anhand des folgenden Befehls, welcher Benutzer den httpd-Prozess besitzt

ps aux | grep httpd

sie erhalten eine mehrzeilige Antwort wie folgt:

phpuser   17121  0.0  0.2 414060  7928 ?        SN   03:49   0:00 /usr/sbin/httpd

Hier zeigt die erste Spalte den Benutzernamen. Nun kennen Sie den Benutzer, der versucht, Dateien zu schreiben. Dies ist in diesem Fall phpuser Sie können jetzt die Berechtigung für das Verzeichnis festlegen, in dem Ihr PHP-Skript versucht, etwas zu schreiben:

Sudo chown phpuser:phpuser PhpCanWriteHere
Sudo chmod 755 PhpCanWriteHere
7
sowrov

Sie können die Berechtigungen eines Ordners mit chmod () von PHP ändern. Weitere Informationen zur Verwendung des Befehls finden Sie hier: http://php.net/manual/de/function.chmod.php

Wenn Sie beim Festlegen der Berechtigungen auf 777 (World Writable) einen Fehler 500 erhalten, bedeutet dies, dass Ihr Server so eingerichtet ist, dass er die Ausführung solcher Dateien verhindert. Dies geschieht aus Sicherheitsgründen. In diesem Fall sollten Sie 755 als höchste Berechtigung für eine Datei verwenden.

Wenn in dem Ordner, in dem Sie das PHP -Dokument ausführen, eine error_log-Datei generiert wird, möchten Sie die letzten Einträge anzeigen. Dadurch erhalten Sie eine Vorstellung, wo das Skript fehlschlägt.

Für Hilfe bei der Bearbeitung von PHP -Dateien verwende ich http://www.tizag.com/phpT/filewrite.php als Ressource.

3
Ryan Gyure

Ich habe herausgefunden, dass Sie mit HostGator Dateien auf CMOD 644 und Ordner auf 755 setzen müssen. Da ich dies aufgrund ihres technischen Supports getan habe, funktioniert es mit HostGator

2
BSM

Beste Möglichkeit, Schreibzugriff auf ein Verzeichnis zu erteilen.

$dst = "path/to/directory";
mkdir($dst); 
chown($dst, "ownername");
chgrp($dst, "groupname");
exec ("find ".$dst." -type d -exec chmod 0777 {} +");
2
pritesh

Ich hatte das gleiche problem:

Da ich es nicht wollte, 0777 in mein PHP-Verzeichnis zu schreiben, Ich erstelle ein tmp-Verzeichnis mit den Rechten 0777, in dem ich die Dateien erstelle, in die ich schreiben muss.

Mein PHP-Verzeichnis bleibt weiterhin geschützt. Wenn jemand das tmp-Verzeichnis hackt, funktioniert die Site wie gewohnt weiter.

2
Jorge Gutierrez

Sie können selinux auf permissiv setzen, um zu analysieren.

    # setenforce 0

Selinux protokolliert, erlaubt jedoch Zugriffe. So können Sie den /var/log/audit/audit.log auf Details überprüfen. Möglicherweise müssen Sie den Selinux-Kontext ändern. In diesem Fall verwenden Sie den Befehl chcon. Wenn Sie benötigen, zeigen Sie uns Ihren audit.log für eine detailliertere Antwort.

Vergessen Sie nicht, selinux zu aktivieren, nachdem Sie das Problem gelöst haben. Selinux sollte besser durchgesetzt werden. 

    # setenforce 1
2
nitishkrs

mit chmod können Sie den Besitz einer Datei nicht festlegen. Um den Besitz der Datei festzulegen, müssen Sie den Befehl chown verwenden.

1
user988294

Ich betreibe Ubuntu, und wie gesagt, niemand: Auf Ubuntu läuft niemand. Sie erhalten den Fehler:

chown: invalid group: 'nobody:nobody'

Verwenden Sie stattdessen die 'nogroup' wie:

chown nobody:nogroup <dirname>
0
orjtor