In Linux- und UNIX-ähnlichen Systemen werden die Berechtigungen von Dateien und Verzeichnissen durch dreistellige Oktalnummern (z. B. 0755 , 0644 ) dargestellt. Diese Berechtigungswerte steuern die Berechtigungen des Lesens, Schreibens und Ausführung des Dateibesitzers, der Benutzergruppe, zu der sie gehört, und anderen Benutzern. In PHP ermöglicht die CHMOD () -Funktion, die Berechtigungen von Dateien oder Verzeichnissen programmatisch zu ändern. In diesem Artikel wird erläutert, wie die Funktion chmod () korrekt verwendet wird, und konzentrieren Sie sich darauf, wie die Octal -Berechtigungswerte umgehen.
<span><span><span class="hljs-keyword">bool</span></span><span> </span><span><span class="hljs-title function_ invoke__">chmod</span></span><span> ( </span><span><span class="hljs-keyword">string</span></span><span> </span><span><span class="hljs-variable">$filename</span></span><span> , </span><span><span class="hljs-keyword">int</span></span><span> </span><span><span class="hljs-variable">$permissions</span></span><span> )
</span></span>
$ Dateiname : Der Pfad zur Datei oder zum Verzeichnis, in den die Berechtigungen geändert werden sollen.
$ berechtigungen : im Oktal ausgedrückte Berechtigungswert (z. B. 0755 ).
Die Funktion gibt einen booleschen Wert zurück, gilt für den Erfolg TRUE und fehlerfrei für das Scheitern zurück.
Die Oktalberechtigungswerte werden normalerweise als dreistellige oder vierstellige Zahl geschrieben, und die ersten drei Ziffern entsprechen:
Erster Platz: Berechtigungen des Dateibesitzers
Zweitens: Berechtigungen an die Benutzergruppe
Dritter Platz: Berechtigungen anderer Benutzer
Die Berechtigungswerte für jedes Bit sind wie folgt:
4 = read (r)
2 = schreiben (w)
1 = ausführen (x)
Diese Werte können überlagert werden. Zum Beispiel:
7 = 4 + 2 + 1 = lesen, schreiben, ausführen
6 = 4 + 2 = lesen, schreiben
5 = 4 + 1 = lesen, ausführen
0755 bedeutet: Der Eigentümer kann Ausführung lesen und schreiben, und Gruppenbenutzer und andere Benutzer können die Ausführung lesen.
0644 bedeutet: Der Eigentümer kann lesen und schreiben, und Gruppenbenutzer und andere Benutzer können nur lesen.
Hinweis: Der Berechtigungswert in PHP muss mit 0 beginnen, um Oktal darzustellen , andernfalls wird er als dezimal interpretiert, was zu falschen Ergebnissen führt.
<span><span><span class="hljs-title function_ invoke__">chmod</span></span><span>(</span><span><span class="hljs-string">'example.txt'</span></span><span>, </span><span><span class="hljs-number">0755</span></span><span>); </span><span><span class="hljs-comment">// richtig,0755 Es ist Oktal</span></span><span>
</span><span><span class="hljs-title function_ invoke__">chmod</span></span><span>(</span><span><span class="hljs-string">'example.txt'</span></span><span>, </span><span><span class="hljs-number">755</span></span><span>); </span><span><span class="hljs-comment">// Fehler,755 Wird als dezimal behandelt</span></span><span>
</span></span>
Hier sind einige häufige Beispiele für die Berechtigungseinstellungen:
<span><span><span class="hljs-comment">// Von allen lesbar und schriftlich sein</span></span><span>
</span><span><span class="hljs-title function_ invoke__">chmod</span></span><span>(</span><span><span class="hljs-string">'script.sh'</span></span><span>, </span><span><span class="hljs-number">0777</span></span><span>);
</span><span><span class="hljs-comment">// Setzen Sie sich an Eigentümer lesen und schreiben,Andere lesen nur</span></span><span>
</span><span><span class="hljs-title function_ invoke__">chmod</span></span><span>(</span><span><span class="hljs-string">'config.ini'</span></span><span>, </span><span><span class="hljs-number">0644</span></span><span>);
</span><span><span class="hljs-comment">// Setzen Sie sich an Eigentümer lesen und schreiben执行,Gruppenbenutzer und andere Benutzer schreibgeschützte Ausführung</span></span><span>
</span><span><span class="hljs-title function_ invoke__">chmod</span></span><span>(</span><span><span class="hljs-string">'public/index.php'</span></span><span>, </span><span><span class="hljs-number">0755</span></span><span>);
</span></span>
Sie können auch die Funktion fileFerms () verwenden, um die aktuellen Dateiberechtigungen zu erhalten und sie mit deCOCT () in das Oktalformat umzuwandeln:
<span><span><span class="hljs-variable">$perms</span></span><span> = </span><span><span class="hljs-title function_ invoke__">fileperms</span></span><span>(</span><span><span class="hljs-string">'example.txt'</span></span><span>);
</span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-title function_ invoke__">substr</span></span><span>(</span><span><span class="hljs-title function_ invoke__">decoct</span></span><span>(</span><span><span class="hljs-variable">$perms</span></span><span>), -</span><span><span class="hljs-number">4</span></span><span>); </span><span><span class="hljs-comment">// Nach Ausgabe von Berechtigungen4Bit Octal</span></span><span>
</span></span>
Dies ist sehr hilfreich, um zu debugieren und zu überprüfen, ob die Berechtigungseinstellungen in Kraft sind.
PHP -Skripte müssen die Erlaubnis haben, die Erlaubnis zur Zieldatei zu ändern . Andernfalls scheitert chmod () .
Auf einigen Systemen können Verzeichnisberechtigungen auch den Dateizugriff beeinflussen .
Vermeiden Sie die Verwendung von 0777 Berechtigungen, es sei denn, es handelt sich um eine temporäre Datei oder eine Debugging -Phase . Versuchen Sie in Produktionsumgebungen, zu vermeiden, dass Dateien alle Benutzer Schreibberechtigungen öffnen.
Beherrschen der Verwendung der CHMOD () -Funktion in PHP, insbesondere der Verarbeitung von Oktalberechtigungswerten, ist entscheidend für die Verwaltung von Serverdateiberechtigungen und das Erstellen sicherer Webanwendungen. Die meisten Probleme mit dem Dateizugriff und Sicherheit können vermieden werden, indem das Oktalformat berücksichtigt und die Berechtigungen korrekt zugewiesen werden.