Problem
Die Methode file_put_contents wird heute in der Protokollschreibmethode verwendet. Wenn die Rückrufmethode zum Schreiben des Protokolls ausgeführt wird, wird angezeigt, dass keine Schreibberechtigung vorliegt zur Datei und eine Fehlermeldung
file_put_contents: failed to open stream: Permission denied (PHP-Video-Tutorial)
Lösungsprozess
Überprüfen Sie die Berechtigungen des Protokollordners, da er täglich generiert wird. Der Ausführungsbenutzer ist Root, daher sind sowohl der Benutzer als auch die Benutzergruppe für die Erstellung des Ordners Root In der Rückrufmethode ist www und in der Schreibmethode
if(!is_dir($dir)){ mkdir($dir,0777,true); }
Wenn das Verzeichnis nicht vorhanden ist, erstellen Sie das Verzeichnis, legen Sie jedoch beim Erstellen des Ordners in der mkdir-Funktion von PHP 777-Berechtigungen fest. Tatsächlich hat die erstellte Datei noch 755 Berechtigungen. Im Linux-System gibt es eine Standardberechtigung beim Erstellen von Dateien/Ordnern. Diese Berechtigung wird durch die umask-Einstellung beeinflusst. In der Konfigurationsdatei /etc/bashrc finden wir die folgende Konfiguration:
if [ $UID -gt 99 ] && [ "`id -gn`" = "`id -un`" ]; then umask 002else umask 022fi
Standard-umask im Linux-System ist es 022, und nach dem Betrieb mit unserem 777 & wird es 755. Dies ist der Grund. Die Einstellungen hier wirken sich direkt auf die Standardberechtigungseinstellungen des Linux-Systems aus und sind nicht nur ein PHP-Problem. Daher wird nicht empfohlen, es direkt zu ändern, um 022 in 000 zu ändern.
Endgültige Lösung
Erstellen Sie zuerst das Verzeichnis und ändern Sie dann mit chmod die Berechtigungen auf 777
mkdir('test', 0777); chmod('test', 0777);
Das obige ist der detaillierte Inhalt vonSo beheben Sie den Fehler bei der PHP-Schreibdateiberechtigung file_put_contents: Fehler beim Öffnen des Streams: Berechtigung verweigert. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!