Aktueller Standort: Startseite> Neueste Artikel> Wie liste ich symbolische Links in einem Verzeichnis und deren entsprechenden Dateien über Scandir auf?

Wie liste ich symbolische Links in einem Verzeichnis und deren entsprechenden Dateien über Scandir auf?

gitbox 2025-09-09

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.

1. Grundnutzung von Skandir

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.

2. Filtern Sie symbolische Links heraus

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>

3..

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>

4. CODE CODE BEISPIEL: Listen Sie die symbolischen Links im Verzeichnis und deren entsprechenden Dateien auf

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">&lt;?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">?&gt;</span></span><span>
</span></span>

5. Code Parsing

  • 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.

6. Probenausgang

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>

7. Zusammenfassung

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.