Maison > développement back-end > tutoriel php > Laissez tout le monde apprendre les fonctions du système de fichiers en PHP (1)

Laissez tout le monde apprendre les fonctions du système de fichiers en PHP (1)

藏色散人
Libérer: 2023-04-10 11:02:01
avant
3016 Les gens l'ont consulté

À partir de cet article, nous apprendrons une série de fonctions liées au système de fichiers PHP. En fait, nous utilisons souvent beaucoup de ces fonctions. Vous n'avez pas besoin de vous en souvenir délibérément. Tant que vous savez qu'une telle chose existe, n'oubliez pas de consulter la documentation lorsque vous l'utilisez.

Fonctions liées au chemin de fichier

Les fonctions liées au chemin de fichier sont souvent plus courantes dans certains frameworks et sont souvent utilisées en conjonction avec __FILE__ et __DIR__ Des constantes magiques comme celle-ci sont utilisées. La fonction

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
Copier après la connexion

basename() consiste à obtenir le nom du fichier dans le chemin. Elle a deux paramètres. Le premier est le chemin du fichier et le second est le contenu filtré. Par exemple, nous filtrons le premier. instruction de test L'extension du fichier.

echo "1) " . dirname("/etc/passwd") , PHP_EOL;
echo "2) " . dirname("/etc/") , PHP_EOL;
echo "3) " . dirname("."), PHP_EOL;
// 1) /etc
// 2) /
// 3) .
Copier après la connexion

dirname() renvoie la partie chemin du chemin, c'est-à-dire la partie qui n'inclut pas le nom du fichier, ce qui est exactement la fonction opposée de basename().

La fonction
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
Copier après la connexion

pathinfo() est utilisée pour renvoyer les informations dans le chemin sous la forme d'un tableau. À partir du résultat, nous pouvons voir la partie dirname du fichier, la partie basename et l'extension de l'extension. fichier et ne contient pas l'extension. Le contenu du nom de fichier.

realpath() renvoie un nom de chemin absolu normalisé. Il développe toutes les connexions symboliques et gère ./, ../ et / redondants dans le chemin d'entrée. Le contenu renvoyé est un chemin absolu standard.

Modifier les informations relatives à la propriété des fichiers

Ensuite, nous apprendrons quelques fonctions pour modifier les attributs liés aux fichiers, principalement le fonctionnement des informations d'autorisation des fichiers dans l'environnement système Linux.

Bien sûr, nous devons d'abord créer un fichier. C'est très similaire à la commande sous Linux.

En plus de donner le nom du fichier à créer, la fonction
touch('test3.txt');
Copier après la connexion

touch() possède également deux paramètres facultatifs qui peuvent spécifier l'heure de création et l'heure d'accès du fichier. Si aucun paramètre n'est donné, la valeur par défaut. est l'heure actuelle. Ce nom de fichier peut être un chemin relatif ou absolu vers un répertoire avec des autorisations et crée un fichier vide dans ce répertoire.

echo fileowner('test.txt'), PHP_EOL; // 501
chown('test.txt', 'www');
clearstatcache();
echo fileowner('test.txt'), PHP_EOL; // 70
Copier après la connexion

Grâce à la fonction fileowner(), nous pouvons obtenir l'utilisateur auquel appartient un fichier. Par défaut, notre utilisateur est l'utilisateur qui exécute actuellement le script PHP, qui est l'utilisateur actuellement connecté au système. Ici, nous utilisons la fonction chown() pour changer l'utilisateur en utilisateur www. clearstatcache() est utilisé pour effacer les informations du cache du système de fichiers s'il n'est pas nettoyé, fileowner() renverra toujours les informations utilisateur précédentes.

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
Copier après la connexion

De même, utilisez la fonction filegroup() pour obtenir les informations de groupe du fichier, et chgrp() est utilisée pour modifier le groupe du fichier. fileperms() est utilisé pour renvoyer les informations d'autorisation du fichier. Il renvoie l'autorisation d'accès au fichier en mode numérique. Ici, nous utilisons sprintf() pour formater le résultat et obtenir notre format d'autorisation système Linux couramment utilisé. La fonction chmod() est utilisée pour modifier les autorisations des fichiers. Ses paramètres d'autorisation sont trois nombres composés de données octales, qui représentent 1, 2, 4 et leurs combinaisons dans le système Linux, nous devons donc ajouter le 0 précédent. pour s'assurer que l'opération peut être effectuée correctement. Concernant la connaissance des autorisations des fichiers système, chacun doit étudier attentivement le contenu pertinent du système Linux.

Notez que si la fonction ci-dessus ne s'exécute pas sur la ligne de commande, la plupart des raisons sont dues au manque d'autorisations. Vous pouvez utiliser sudo pour tester. Lorsque vous exécutez fastcgi, vous devez accorder plus d'attention aux problèmes d'autorisation et apporter des modifications sécurisées aux autorisations de fichiers uniquement dans les répertoires que notre serveur peut exploiter.

La fonction
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
// )
Copier après la connexion

stat() peut obtenir toutes les informations d'attribut du fichier spécifié. Ici, nous pouvons voir l'uid, le gid, le ctime, le mtime et d'autres informations du fichier.

Opérations liées aux connexions de fichiers logicielles et matérielles

Dans les systèmes Linux, il existe des connaissances sur les connexions logicielles et les connexions matérielles. En fait, les liens symboliques sont comme des raccourcis dans Windows, tandis que les liens physiques sont liés à la copie d'une copie de données. En PHP, nous nous assurons également de la création de connexions soft et hard et de quelques opérations associées.

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
// )
Copier après la connexion

L'utilisation de la fonction link() crée un fichier de lien physique du fichier spécifié, tandis que l'utilisation de symlink() crée un fichier de lien logiciel. Relativement parlant, nous utilisons des connexions souples dans davantage de scénarios. lstat() a la même fonction que la fonction stat(), affichant diverses informations d'attribut du fichier, mais la fonction lstat() est destinée aux fichiers de liens logiciels et physiques.

lchown('ltest2.txt', 'zhangyue');
lchgrp('ltest2.txt', 'staff');
// lrwxr-xr-x  1 zhangyue  staff      8 Oct 19 09:58 ltest2.txt -> test.txt
Copier après la connexion

De même, nous pouvons également modifier les informations sur les utilisateurs et les groupes d'utilisateurs des connexions logicielles et matérielles, mais leurs informations ne peuvent pas être consultées via fileowner() ou filegroup(). Puisqu'il s'agit de fichiers de connexion, ils sont toujours liés au fichier d'origine. À l'aide de fonctions telles que fileowner(), vous pouvez toujours afficher les informations du fichier d'origine. Nous pouvons utiliser ls -l dans l'environnement système pour vérifier si les informations sur l'utilisateur et le groupe d'utilisateurs du fichier de connexion ont été modifiées avec succès.

Résumé

Le contenu d'aujourd'hui est relativement simple et l'opération de modification des autorisations n'est pas couramment utilisée. Cependant, ils restent très utiles pour la sécurité du système. Par exemple, pour le téléchargement, si nous voulons empêcher le téléchargement de fichiers exécutables, nous pouvons modifier les autorisations des fichiers pour empêcher que les fichiers soient exécutés directement, jouant ainsi un rôle dans protection de la sécurité. De plus, les opérations liées aux chemins de répertoires sont également à la base de certains frameworks. Des fonctions telles que dirname() et basename() seront vues à l'entrée de presque tous les frameworks ou de Composer.

测试代码:
https://github.com/zhangyue0503/dev-blog/blob/master/php/202010/source/6.PHP中的文件系统函数(一).php
参考文档:
https://www.php.net/manual/zh/ref.filesystem.php
Copier après la connexion

推荐学习:《PHP视频教程

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Étiquettes associées:
php
source:segmentfault.com
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal