Dans PHP, la fonction Scandir peut répertorier tous les fichiers et sous-répertoires dans un répertoire spécifié. Cependant, Scandir ne renvoie qu'une simple liste de fichiers et de répertoires et ne fait pas de distinction entre les liens symboliques. Afin de répertorier les liens symboliques dans le répertoire et les fichiers cibles auxquels ils pointent, nous devons utiliser les fonctions scandir et is_link et readLink pour le traitement.
La fonction Scandir renvoie tous les fichiers et sous-répertoires dans le répertoire spécifié et est organisé par défaut par défaut. L'utilisation de base est la suivante:
<span><span><span class="hljs-variable">$files</span></span><span> = </span><span><span class="hljs-title function_ invoke__">scandir</span></span><span>(</span><span><span class="hljs-variable">$directory</span></span><span>);
</span></span>Le paramètre de répertoire $ est le répertoire cible à analyser, et la valeur de retour est un tableau contenant tous les fichiers et sous-répertoires de ce répertoire. Il convient de noter que la liste renvoyée par Scandir comprend Special . et .. éléments, représentant respectivement le répertoire actuel et le répertoire parent.
Pour déterminer si un fichier ou un répertoire est un lien symbolique, vous pouvez utiliser la fonction IS_LINK de PHP. Il vérifie si un chemin donné est un lien symbolique.
<span><span><span class="hljs-keyword">if</span></span><span> (</span><span><span class="hljs-title function_ invoke__">is_link</span></span><span>(</span><span><span class="hljs-variable">$path</span></span><span>)) {
</span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-string">"<span class="hljs-subst">$path</span></span></span><span> C'est un lien symbolique\n";
}
</span></span>Utilisez la fonction ReadLink pour obtenir le chemin de fichier réel sur lequel le lien symbolique pointe. Si le chemin donné est un lien symbolique, ReadLink renverra le chemin cible du lien symbolique; Sinon, il reviendra faux .
<span><span><span class="hljs-keyword">if</span></span><span> (</span><span><span class="hljs-title function_ invoke__">is_link</span></span><span>(</span><span><span class="hljs-variable">$path</span></span><span>)) {
</span><span><span class="hljs-variable">$target</span></span><span> = </span><span><span class="hljs-title function_ invoke__">readlink</span></span><span>(</span><span><span class="hljs-variable">$path</span></span><span>);
</span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-string">"<span class="hljs-subst">$path</span></span></span><span> Orientation </span><span><span class="hljs-subst">$target</span></span><span>\n";
}
</span></span>Nous pouvons maintenant combiner le code ci-dessus pour répertorier les liens symboliques et leurs fichiers cibles dans le répertoire spécifié.
<span><span><span class="hljs-meta"><?php</span></span><span>
</span><span><span class="hljs-comment">// Spécifiez le répertoire pour scanner</span></span><span>
</span><span><span class="hljs-variable">$directory</span></span><span> = </span><span><span class="hljs-string">'/path/to/directory'</span></span><span>;
</span><span><span class="hljs-comment">// utiliser scandir Obtenez la liste des répertoires</span></span><span>
</span><span><span class="hljs-variable">$files</span></span><span> = </span><span><span class="hljs-title function_ invoke__">scandir</span></span><span>(</span><span><span class="hljs-variable">$directory</span></span><span>);
</span><span><span class="hljs-comment">// Liste des répertoires Traverse</span></span><span>
</span><span><span class="hljs-keyword">foreach</span></span><span> (</span><span><span class="hljs-variable">$files</span></span><span> </span><span><span class="hljs-keyword">as</span></span><span> </span><span><span class="hljs-variable">$file</span></span><span>) {
</span><span><span class="hljs-comment">// exclure . et .. article</span></span><span>
</span><span><span class="hljs-keyword">if</span></span><span> (</span><span><span class="hljs-variable">$file</span></span><span> === </span><span><span class="hljs-string">'.'</span></span><span> || </span><span><span class="hljs-variable">$file</span></span><span> === </span><span><span class="hljs-string">'..'</span></span><span>) {
</span><span><span class="hljs-keyword">continue</span></span><span>;
}
</span><span><span class="hljs-comment">// Épissage du chemin complet du fichier</span></span><span>
</span><span><span class="hljs-variable">$filePath</span></span><span> = </span><span><span class="hljs-variable">$directory</span></span><span> . DIRECTORY_SEPARATOR . </span><span><span class="hljs-variable">$file</span></span><span>;
</span><span><span class="hljs-comment">// Vérifiez si le fichier est un lien symbolique</span></span><span>
</span><span><span class="hljs-keyword">if</span></span><span> (</span><span><span class="hljs-title function_ invoke__">is_link</span></span><span>(</span><span><span class="hljs-variable">$filePath</span></span><span>)) {
</span><span><span class="hljs-comment">// 获取符号链接Orientation的目标文件</span></span><span>
</span><span><span class="hljs-variable">$target</span></span><span> = </span><span><span class="hljs-title function_ invoke__">readlink</span></span><span>(</span><span><span class="hljs-variable">$filePath</span></span><span>);
</span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-string">"<span class="hljs-subst">$file</span></span></span><span> C'est un lien symbolique,Orientation </span><span><span class="hljs-subst">$target</span></span><span>\n";
}
}
</span><span><span class="hljs-meta">?></span></span><span>
</span></span>Scandir ($ Directory) : obtient tous les fichiers et sous-répertoires dans le répertoire.
is_link ($ filepath) : détermine si le fichier actuel est un lien symbolique.
readLink ($ filepath) : obtient le chemin du fichier vers lequel le lien symbolique pointe.
Supposons que le répertoire / path / vers / répertoire a le contenu suivant:
file1.txt (fichier normal)
symLink1 (symLink to /path/to/target1.txt )
symLink2 (symLink to /path/to/target2.txt )
Après avoir exécuté le code ci-dessus, la sortie sera:
<span><span>symlink1 C'est un lien symbolique,Orientation /</span><span><span class="hljs-type">path</span></span><span>/</span><span><span class="hljs-keyword">to</span></span><span>/target1.txt
symlink2 C'est un lien symbolique,Orientation /</span><span><span class="hljs-type">path</span></span><span>/</span><span><span class="hljs-keyword">to</span></span><span>/target2.txt
</span></span>En combinant les fonctions scandir et is_link et readLink , nous pouvons facilement énumérer les liens symboliques dans le répertoire spécifié et leurs fichiers cibles correspondants. Cette approche peut nous aider à mieux gérer et analyser les liens symboliques dans le système de fichiers, en particulier lorsque vous traitez des structures de répertoires complexes.