linkinfo()
Die linkinfo()-Funktion ist eine eingebaute PHP-Funktion, die Informationen über einen Hard Link zurückgibt und prüft, ob ein Link tatsächlich existiert.
Was ist die linkinfo()-Funktion?
Die linkinfo()-Funktion ist eine eingebaute PHP-Funktion, die prüft, ob ein Link tatsächlich existiert, und auf Unix-Systemen das Gerät zurückgibt, auf dem er sich befindet. Konkret gibt sie das Feld st_dev aus der C-Struktur stat zurück, die vom Systemaufruf lstat() erzeugt wird — eine Ganzzahl, die das Gerät (Festplatte/Partition) identifiziert, auf dem der Link gespeichert ist.
In der Praxis ist linkinfo() am nützlichsten als schnelle Existenzprüfung: Gibt sie 0 oder eine positive Ganzzahl zurück, existiert der Link; gibt sie -1 oder false zurück, fehlt der Pfad, ist er defekt oder nicht zugänglich. Trotz des Namens gibt sie nicht die Anzahl der Hard Links zurück — diese Information liefert das Element nlink von stat() oder lstat().
Diese Seite behandelt die Syntax der Funktion, Rückgabewerte, ein ausführbares Beispiel, häufige Fallstricke und verwandte Dateisystemfunktionen.
Syntax
linkinfo(string $path): int|falseDie Funktion nimmt einen einzigen Parameter entgegen:
$path— der Pfad zum symbolischen oder Hard Link, den Sie untersuchen möchten.
Sie gibt zurück:
- eine nicht-negative Ganzzahl (den
st_dev-Gerätebezeichner), wenn der Link existiert, -1, wenn der Link nicht gelesen werden kann,lstataber teilweise erfolgreich ist, oderfalse, wenn$pathnicht existiert oder nicht zugänglich ist.
Da 0 auf manchen Plattformen ein gültiger, „truthy-but-falsy"-Rückgabewert ist, sollten Sie immer mit !== false vergleichen, anstatt sich auf eine lose boolesche Prüfung zu verlassen.
Verwendung der linkinfo()-Funktion
Gehen Sie wie folgt vor:
- Geben Sie den Pfad zum symbolischen Link oder Hard Link an, den Sie prüfen möchten.
- Rufen Sie
linkinfo()auf und übergeben Sie den Pfad. - Vergleichen Sie das Ergebnis strikt mit
false, um festzustellen, ob der Link existiert.
Das folgende Beispiel erstellt eine echte Datei und einen symbolischen Link dazu und untersucht den Link dann mit linkinfo():
<?php
// Set up a file and a symbolic link to it in the temp directory.
$target = tempnam(sys_get_temp_dir(), 'tgt');
$link = sys_get_temp_dir() . '/example_link';
@unlink($link); // remove a leftover link from a previous run
symlink($target, $link); // create the symlink
$info = linkinfo($link);
if ($info !== false) {
echo "The link '$link' exists. Device id (st_dev): $info" . PHP_EOL;
} else {
echo "The link '$link' does not exist or is inaccessible." . PHP_EOL;
}
// A path that doesn't exist fails: false on most systems, -1 on some
// Unix builds (a warning may also be emitted), so treat both as "missing".
$missing = @linkinfo('/no/such/link');
var_dump($missing === false || $missing === -1); // bool(true) -> "missing"
// Clean up.
unlink($link);
unlink($target);Eine typische Ausgabe sieht etwa so aus:
The link '/tmp/example_link' exists. Device id (st_dev): 16777220
bool(true)Die genaue Geräte-ID hängt von Ihrem Betriebssystem und Dateisystem ab, daher sollten Sie sie nicht hartcodieren — nur ihre Anwesenheit ist bedeutsam. Für den fehlenden Pfad gibt PHP auf den meisten Plattformen false zurück und auf manchen Unix-Builds -1, weshalb das Beispiel beide als „nicht gefunden" behandelt.
Häufige Fallstricke
- Windows.
linkinfo()ist unter Windows nicht sinnvoll und zeigt im Wesentlichen nur an, ob der Pfad ein Link ist. Verwenden Sie es für die Existenzprüfung, nicht für die Gerätenummer. - Verwenden Sie
!== false, nicht!$info. Auf manchen Systemen gibt ein gültiger Link0zurück, was eine lose Prüfung fälschlicherweise als „fehlend" interpretieren würde. - Er folgt dem Link nicht.
linkinfo()untersucht den Link selbst (wielstat), nicht die Datei, auf die der Link zeigt. Ein Symlink zu einem gelöschten Ziel wird weiterhin als existent gemeldet. - Nicht zum Zählen von Hard Links. Verwenden Sie
stat($path)['nlink'], wenn Sie die Anzahl der Hard Links benötigen.
Verwandte Funktionen
symlink()— erstellt einen symbolischen Link.link()— erstellt einen Hard Link.readlink()— gibt das Ziel zurück, auf das ein symbolischer Link zeigt.is_link()— prüft, ob ein Pfad ein symbolischer Link ist.lstat()— vollständige Statusinformationen für einen Link, ohne ihm zu folgen.
Fazit
Die linkinfo()-Funktion ist eine einfache Möglichkeit zu bestätigen, dass ein Link existiert, und das Gerät zu lesen, auf dem er sich befindet, indem sie das Feld st_dev von lstat() spiegelt. Verwenden Sie sie für Existenzprüfungen (immer mit einem strikten !== false-Vergleich) und greifen Sie auf stat() oder is_link() zurück, wenn Sie reichhaltigere Details wie die Anzahl der Hard Links oder den Link-Typ benötigen.