GNU/Linux >> LINUX-Kenntnisse >  >> Linux

file_put_contents erstellt keine txt-Datei

Ich hatte vor kurzem das gleiche Problem und bin über diese Frage gestolpert. Leider sagte Choppyfireballs, das OP sagte in einem Kommentar, er habe seine eigene Lösung gefunden und nur eine Antwort akzeptiert, die keinem von uns geholfen habe ... Dann nach einer Suche und einem Erfolg, um file_put_contents zu erstellen Arbeit wieder Ich beschloss, meine Lösung zu teilen.

Die Berechtigungen meiner Dateien und Verzeichnisse waren in Ordnung, um jegliches Schreiben zu akzeptieren (stellen Sie sicher, dass Ihre Verzeichnisse chmod 757 sind dies ergibt den Stamm und andere die Berechtigung zum Schreiben von Dateien in den Speicherort). Wenn es immer noch nicht so funktioniert wie bei mir, liegt das daran, dass Ihr System wahrscheinlich SELinux ist (Security Enhanced Linux)-System.

Wenn Sie sichergehen wollen, schreiben Sie setenforce 0 Dadurch wird Selinux in den zulässigen Modus versetzt. Führen Sie Ihr Skript erneut aus. Wenn es funktioniert, bedeutet dies, dass das Problem gut beschrieben ist.

Schalten Sie in diesem Fall Selinux wieder ein setenforce 1 und versuchen Sie ls -Zl in dem Verzeichnis, in dem sich das Verzeichnis Ihres Projekts befindet. Dadurch erhalten Sie eine Zeile wie

drwx---r-x.  9  root   root  system_u:object_r:httpd_sys_content_t:s0  4096  Dec  8  00:25  project

oder etwas anderes, aber httpd_sys_content_t wenn Sie chcon verwendet haben um den Kontext von einem Verzeichnis in dieses zu übertragen. aber wenn Sie httpd_sys_content_t nicht haben Es ist in Ordnung, weil wir sowieso den Kontext dieses Verzeichnisses ändern müssen.

Zuerst müssen Sie public_content_rw_t akzeptieren Kontexte zum Schreiben der Datei. Geben Sie

ein
setsebool -P httpd_anon_write on

Dies setzt (permanent) SELinux boolean httpd_anon_write auf true und jeden Kontext als public_content_rw_t bezeichnet haben die Rechte, alle Dateien an ihrem eigenen Speicherort zu schreiben.

Jetzt müssen Sie SELinux sagen, dass Ihr Projektverzeichnis public_content_rw_t ist oder Sie können immer noch keine Dateien schreiben. Geben Sie ein:

semanage fcontext --add --type public_content_rw_t "/project(/.*)?"

und restorecon -RvF /project selinux zu sagen um die obigen Spezifikationen anzuwenden.

Jetzt ist Ihr Verzeichnis public_content_rw_t und Sie sollten in der Lage sein, Dateien zu schreiben.


Ihr Problem liegt wahrscheinlich daran, dass Apache keine Berechtigung zum Schreiben in den von Ihnen angegebenen Dateispeicherort hat. Gehen Sie zu diesem Verzeichnis und überprüfen Sie die Berechtigungen und den Gruppenbesitz mit dem ls Befehl:

cd "My working file location"
ls -l .

Die Ausgabe enthält drei Spalten, die die Berechtigungen, den Eigentümer und die Gruppe für das Verzeichnis anzeigen. Höchstwahrscheinlich gehören sie root und haben keine Berechtigungen für apache um in das Verzeichnis zu schreiben.

Wenn dies der Fall ist, wird in Ihrem Apache-Protokoll ein Fehler angezeigt, wenn versucht wird, die Datei zu erstellen. Versuchen Sie, Ihre Protokolle zu verfolgen, während Sie das Skript in Ihrem Browser ausführen:

tail -f /var/log/apache2/error.log

Linux
  1. Alle Dateien in einem Verzeichnis löschen, dessen Name nicht mit einer Zeile in einer Dateiliste übereinstimmt?

  2. Verzeichnis in Suchen ausschließen?

  3. Unterschied bei der Berechnung der Verzeichnisgröße?

  4. Warum ist Nullglob kein Standard?

  5. Alle Tmux-Scrollbacks in eine Datei schreiben?

Bash:In Datei schreiben

Warum erstellt mein symbolischer Link eine Datei und keinen Ordner?

Ein Befehl zum Erstellen eines Verzeichnisses und einer Datei darin Linux-Befehl

pip install pickle funktioniert nicht - keine solche Datei oder kein Verzeichnis

xauth erstellt keine .Xauthority-Datei

Shebang oder nicht Shebang