Ab diesem Artikel lernen wir eine Reihe von Funktionen im Zusammenhang mit dem PHP-Dateisystem kennen. Tatsächlich werden viele dieser Funktionen von uns häufig verwendet. Sie müssen sich nicht bewusst daran erinnern, dass es so etwas gibt. Denken Sie daran, die Dokumentation zu überprüfen, wenn Sie sie verwenden.
Funktionen für den Dateipfad sind in einigen Frameworks häufig häufiger anzutreffen und werden häufig in Verbindung mit magischen Konstanten wie __FILE__ und __DIR__ verwendet. Die Funktion
echo "1) ".basename("/etc/sudoers.d", ".d"), PHP_EOL; echo "2) ".basename("/etc/passwd"), PHP_EOL; echo "3) ".basename("/etc/"), PHP_EOL; echo "4) ".basename("."), PHP_EOL; echo "5) ".basename("/"), PHP_EOL; echo "6) ".basename("/usr/local/Cellar/php/7.3.9_1/README.md"), PHP_EOL; // 1) sudoers // 2) passwd // 3) etc // 4) . // 5) // 6) README.md
basename() dient zum Abrufen des Dateinamens im Pfad. Der erste ist der Pfad der Datei und der zweite ist der gefilterte Inhalt. In der ersten Testanweisung filtern wir das Suffix des Dateinamens aus.
echo "1) " . dirname("/etc/passwd") , PHP_EOL; echo "2) " . dirname("/etc/") , PHP_EOL; echo "3) " . dirname("."), PHP_EOL; // 1) /etc // 2) / // 3) .
dirname() gibt den Pfadteil des Pfades zurück, also den Teil, der den Dateinamen nicht enthält, was genau die entgegengesetzte Funktion von basename() ist. Die Funktion
print_r(pathinfo('/usr/local/Cellar/php/7.3.9_1/README.md')); // Array // ( // [dirname] => /usr/local/Cellar/php/7.3.9_1 // [basename] => README.md // [extension] => md // [filename] => README // ) echo realpath('./../../..//../etc/passwd'), PHP_EOL; // /private/etc/passwd
pathinfo() wird verwendet, um die Informationen im Pfad in Form eines Arrays zurückzugeben. Aus dem Ergebnis können wir den Dirname-Teil der Datei, den Basisnamen-Teil sowie die Erweiterung der Datei sehen und der Dateinameninhalt, der die Erweiterung nicht enthält.
realpath() gibt einen normalisierten absoluten Pfadnamen zurück. Es erweitert alle symbolischen Verbindungen und verarbeitet ./, ../ und redundante / im Eingabepfad.
Als nächstes lernen wir einige Funktionen kennen, die dateibezogene Attribute ändern, hauptsächlich den Betrieb von Dateiberechtigungsinformationen in der Linux-Systemumgebung.
Natürlich müssen wir zuerst eine Datei erstellen. Es ist dem Befehl unter Linux sehr ähnlich. Die Funktion
touch('test3.txt');
touch() gibt nicht nur den Namen der zu erstellenden Datei an, sondern verfügt auch über zwei optionale Parameter zur Angabe der Erstellungszeit und der Zugriffszeit der Datei. Wenn keine Parameter angegeben werden, ist der Standardwert die aktuelle Zeit. Dieser Dateiname kann ein relativer oder absoluter Pfad zu einem Verzeichnis mit Berechtigungen sein und erstellt eine leere Datei in diesem Verzeichnis.
echo fileowner('test.txt'), PHP_EOL; // 501 chown('test.txt', 'www'); clearstatcache(); echo fileowner('test.txt'), PHP_EOL; // 70
Über die Funktion fileowner() können wir den Benutzer ermitteln, zu dem eine Datei gehört. Standardmäßig ist unser Benutzer der Benutzer, der gerade das PHP-Skript ausführt, also der aktuell angemeldete Benutzer des Systems.
Hier verwenden wir die Funktion chown(), um den Benutzer in einen www-Benutzer zu ändern. clearstatcache() wird verwendet, um die Cache-Informationen des Dateisystems zu löschen. Wenn es nicht bereinigt wird, gibt fileowner() weiterhin die vorherigen Benutzerinformationen zurück.
echo filegroup('test.txt'), PHP_EOL; // 20 chgrp('test.txt', 'www'); clearstatcache(); echo filegroup('test.txt'), PHP_EOL; // 70 echo substr(sprintf('%o', fileperms('test.txt')), -4), PHP_EOL; // 0766 chmod('test.txt', 0777); clearstatcache(); echo substr(sprintf('%o', fileperms('test.txt')), -4), PHP_EOL; // 0777
Verwenden Sie in ähnlicher Weise die Funktion filegroup(), um die Gruppeninformationen der Datei abzurufen, und chgrp() wird verwendet, um die Gruppe der Datei zu ändern. fileperms() wird verwendet, um die Berechtigungsinformationen der Datei zurückzugeben. Es gibt die Dateizugriffsberechtigung im numerischen Modus zurück. Hier verwenden wir sprintf(), um das Ergebnis zu formatieren und unser häufig verwendetes Linux-Systemberechtigungsformat zu erhalten. Die Funktion
chmod() wird verwendet, um die Berechtigungen von Dateien zu ändern. Ihre Berechtigungsparameter sind drei Zahlen, die aus Oktaldaten bestehen, die 1, 2, 4 und ihre Kombinationen im Linux-System darstellen, sodass wir ein Plus von 0 benötigen Wird verwendet, um sicherzustellen, dass der Vorgang normal durchgeführt werden kann. In Bezug auf die Kenntnis der Systemdateiberechtigungen muss jeder den relevanten Inhalt im Linux-System sorgfältig studieren.
Beachten Sie, dass, wenn die obige Funktion nicht in der Befehlszeile ausgeführt werden kann, die meisten Gründe auf fehlende Berechtigungen zurückzuführen sind. Sie können sudo zum Testen verwenden. Bei der Ausführung in fastcgi müssen Sie den Berechtigungsproblemen mehr Aufmerksamkeit schenken und sichere Dateiberechtigungsänderungen nur in Verzeichnissen vornehmen, die unser Server bedienen kann. Die Funktion
print_r(stat('test.txt')); // Array // ( // [0] => 16777220 // [1] => 8707958352 // [2] => 33279 // [3] => 2 // [4] => 70 // [5] => 70 // [6] => 0 // [7] => 0 // [8] => 1603070453 // [9] => 1603070453 // [10] => 1603072836 // [11] => 4096 // [12] => 0 // [dev] => 16777220 // [ino] => 8707958352 // [mode] => 33279 // [nlink] => 2 // [uid] => 70 // [gid] => 70 // [rdev] => 0 // [size] => 0 // [atime] => 1603070453 // [mtime] => 1603070453 // [ctime] => 1603072836 // [blksize] => 4096 // [blocks] => 0 // )
stat() kann alle Attributinformationen der angegebenen Datei abrufen. Hier können wir die UID, GID, Ctime, Mtime und andere Informationen der Datei sehen.
In Linux-Systemen gibt es Kenntnisse über weiche und harte Verbindungen. Tatsächlich ähneln Softlinks Verknüpfungen in Windows, während Hardlinks mit dem Kopieren einer Datenkopie zusammenhängen. In PHP bieten wir uns auch die Möglichkeit, weiche und harte Verbindungen sowie einige damit verbundene Vorgänge zu erstellen.
link('test.txt', 'ltest.txt'); echo linkinfo('ltest.txt'), PHP_EOL; // 16777220 symlink('test.txt', 'ltest2.txt'); echo linkinfo('ltest2.txt'), PHP_EOL; // 16777220 print_r(lstat('ltest2.txt')); // Array // ( // [0] => 16777220 // [1] => 8707962848 // [2] => 41453 // [3] => 1 // [4] => 0 // [5] => 20 // [6] => 0 // [7] => 8 // [8] => 1603072717 // [9] => 1603072717 // [10] => 1603072717 // [11] => 4096 // [12] => 0 // [dev] => 16777220 // [ino] => 8707962848 // [mode] => 41453 // [nlink] => 1 // [uid] => 0 // [gid] => 20 // [rdev] => 0 // [size] => 8 // [atime] => 1603072717 // [mtime] => 1603072717 // [ctime] => 1603072717 // [blksize] => 4096 // [blocks] => 0 // )
Mit der Funktion link() wird eine Hardlink-Datei der angegebenen Datei erstellt, während mit symlink() eine Softlink-Datei erstellt wird. Relativ gesehen verwenden wir weiche Verbindungen in mehr Szenarien. lstat() hat die gleiche Funktion wie die Funktion stat() und zeigt verschiedene Attributinformationen der Datei an, die Funktion lstat() ist jedoch auf Soft- und Hardlink-Dateien ausgerichtet.
lchown('ltest2.txt', 'zhangyue'); lchgrp('ltest2.txt', 'staff'); // lrwxr-xr-x 1 zhangyue staff 8 Oct 19 09:58 ltest2.txt -> test.txt
Ähnlich können wir auch die Benutzer- und Benutzergruppeninformationen von Soft- und Hard-Verbindungen ändern, ihre Informationen können jedoch nicht über fileowner() oder filegroup() angezeigt werden. Da es sich um Verbindungsdateien handelt, sind sie weiterhin an die Originaldatei gebunden. Mit Funktionen wie fileowner() können Sie weiterhin die Informationen der Originaldatei anzeigen. Wir können ls -l in der Systemumgebung verwenden, um zu überprüfen, ob die Benutzer- und Benutzergruppeninformationen der Verbindungsdatei erfolgreich geändert wurden.
Der heutige Inhalt ist relativ einfach und das Ändern von Berechtigungen wird nicht häufig verwendet. Sie sind jedoch immer noch sehr nützlich für die Systemsicherheit. Wenn wir beispielsweise das Hochladen ausführbarer Dateien verhindern möchten, können wir die Berechtigungen der Dateien ändern, um zu verhindern, dass die Dateien direkt ausgeführt werden, und spielen somit eine Rolle Sicherheitsschutz.
另外,目录路径相关的操作也是一些框架的基础,几乎所有框架的入口或者说是 Composer 的入口,都会见到 dirname() 以及 basename() 之类函数的身影。
测试代码:
https://github.com/zhangyue0503/dev-blog/blob/master/php/202010/source/6.PHP中的文件系统函数(一).php
推荐学习:php视频教程
Das obige ist der detaillierte Inhalt vonWas sind die Dateisystemfunktionen in PHP?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!