In PHP kann die Scandir -Funktion alle Dateien und Unterverzeichnisse in einem bestimmten Verzeichnis auflisten. Scandir gibt jedoch nur eine einfache Liste von Dateien und Verzeichnissen zurück und unterscheidet nicht zwischen symbolischen Links. Um die symbolischen Links im Verzeichnis und die Zieldateien aufzulisten, auf die sie verweisen, müssen wir Scandir und IS_LINK- und Readlink -Funktionen zur Verarbeitung verwenden.
Die Scandir -Funktion gibt alle Dateien und Unterverzeichnisse im angegebenen Verzeichnis zurück und ist standardmäßig alphabetisch angeordnet. Die grundlegende Verwendung ist wie folgt:
<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>Der Parameter $ Directory ist das zu scannte Zielverzeichnis, und der Rückgabewert ist ein Array, das alle Dateien und Unterverzeichnisse in diesem Verzeichnis enthält. Es ist zu beachten, dass die von Scandir zurückgegebene Liste Special enthält . und .. Elemente, die das aktuelle Verzeichnis bzw. das übergeordnete Verzeichnis darstellen.
Um festzustellen, ob eine Datei oder ein Verzeichnis ein symbolischer Link ist, können Sie die IS_LINK -Funktion von PHP verwenden. Es prüft, ob ein bestimmter Pfad ein symbolischer Glied ist.
<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> Es ist ein symbolischer Link\n";
}
</span></span>Verwenden Sie die Readlink -Funktion, um den tatsächlichen Dateipfad zu erhalten, auf den die symbolischen Linkpunkte feststellen. Wenn der gegebene Pfad ein symbolischer Link ist, gibt ReadLink den Zielpfad des symbolischen Links zurück. Andernfalls wird falsch zurückgegeben.
<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> Orientierung </span><span><span class="hljs-subst">$target</span></span><span>\n";
}
</span></span>Jetzt können wir den oben genannten Code kombinieren, um die symbolischen Links und deren Zieldateien im angegebenen Verzeichnis aufzulisten.
<span><span><span class="hljs-meta"><?php</span></span><span>
</span><span><span class="hljs-comment">// Geben Sie das zu scanische Verzeichnis an</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">// verwenden scandir Holen Sie sich die Verzeichnisliste</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">// Traverse -Verzeichnisliste</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">// ausschließen . Und .. Artikel</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">// Spleißen vollständiger Dateipfad</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">// Überprüfen Sie, ob die Datei ein symbolischer Link ist</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">// 获取符号链接Orientierung的目标文件</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> Es ist ein symbolischer Link,Orientierung </span><span><span class="hljs-subst">$target</span></span><span>\n";
}
}
</span><span><span class="hljs-meta">?></span></span><span>
</span></span>Scandir ($ Directory) : Erhält alle Dateien und Unterverzeichnisse im Verzeichnis.
IS_LINK ($ filepath) : Bestimmt, ob die aktuelle Datei ein symbolischer Link ist.
ReadLink ($ filepath) : Holt den Dateipfad, auf den die symbolischen Verknüpfungspunkte Punkte erhalten.
Angenommen, das Verzeichnis /Pfad/an/Verzeichnis hat den folgenden Inhalt:
Datei1.txt (Normale Datei)
Symlink1 (Symlink to /path/to/target1.txt )
Symlink2 (Symlink to /path/to/target2.txt )
Nach der Ausführung des obigen Codes ist die Ausgabe:
<span><span>symlink1 Es ist ein symbolischer Link,Orientierung /</span><span><span class="hljs-type">path</span></span><span>/</span><span><span class="hljs-keyword">to</span></span><span>/target1.txt
symlink2 Es ist ein symbolischer Link,Orientierung /</span><span><span class="hljs-type">path</span></span><span>/</span><span><span class="hljs-keyword">to</span></span><span>/target2.txt
</span></span>Durch die Kombination von Scandir- und IS_LINK- und Readlink -Funktionen können wir die symbolischen Links im angegebenen Verzeichnis und deren entsprechenden Zieldateien problemlos auflisten. Dieser Ansatz kann uns helfen, symbolische Links im Dateisystem besser zu verwalten und zu analysieren, insbesondere wenn es sich um komplexe Verzeichnisstrukturen handelt.