Die Funktion der IS_LINK -Funktion besteht darin, festzustellen, ob der angegebene Pfad ein symbolischer Zusammenhang ist. Returning True bedeutet, dass der Pfad ein symbolischer Glied ist, und wenn es falsch zurückgibt, bedeutet dies, dass es sich nicht um ein symbolischer Glied handelt oder der Pfad nicht existiert. Das grundlegende Nutzungsformat lautet wie folgt:
<span><span><span class="hljs-title function_ invoke__">is_link</span></span><span>(</span><span><span class="hljs-keyword">string</span></span><span> </span><span><span class="hljs-variable">$filename</span></span><span>): </span><span><span class="hljs-keyword">bool</span></span><span>
</span></span>Wenn der angegebene Pfad $ Dateiname auf einen symbolischen Link verweist, gibt IS_LINK TRUE zurück, ansonsten falsch . Es ist zu beachten, dass IS_LINK nicht bestimmt, ob die verknüpfte Zieldatei oder das Verzeichnis vorhanden ist, sondern nur feststellt, ob es sich um einen symbolischen Link handelt.
Wenn der Pfad auf ein Verzeichnis hinweist, verhalten sich IS_LINK- und AUSSCHLAGENDIEN DISSE DAS und können korrekt bestimmen, ob es sich um symbolische Links handelt. Das Problem ist, dass die symbolischen Verbindungen von Verzeichnissen einige spezifische Fallstricke einführen können:
Verwirrung zwischen Verzeichnissen und Dateien : Wenn Sie versuchen, einen Verzeichnis -Link zu beurteilen, stellen Sie sicher, dass der Link selbst eher ein symbolischer Link als ein normales Verzeichnis ist. Da IS_LINK nicht unterscheiden kann, ob das Ziel ein Verzeichnis oder eine Datei ist, wird nur angegeben, ob der Pfad ein symbolischer Link ist.
PATH -Berechtigungen : In einigen Fällen kann das Ziel durch die symbolische Verbindung aufgrund von Erlaubnisfragen nicht zugänglich sein. Wenn Sie nur IS_LINK verwenden, finden Sie kein unzugängliches Problem für das Ziel, sodass Sie mit Funktionen wie is_readable oder is_writable zusammenarbeiten müssen, um den Zugriffsstatus des verknüpften Ziels zu bestätigen.
Ein häufiges Problem ist, dass symbolische Links Schleifen bilden können. Zum Beispiel zeigt ein symbolischer Link auf sich selbst oder auf einen anderen symbolischen Glied, der eine kreisförmige Struktur bildet. Diese IS_LINK -Funktion selbst erkennt dies nicht. Daher muss beim Umgang mit symbolischen Links zusätzliche Sorgfalt aufgenommen werden, um zu vermeiden, dass das Programm in eine tote Schleife fällt.
<span><span><span class="hljs-comment">// Annahmen 'link1' ist eine symbolische Verbindung,Orientierung 'link2'</span></span><span>
</span><span><span class="hljs-comment">// 'link2' 又ist eine symbolische Verbindung,Orientierung 'link1'</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-string">'link1'</span></span><span>)) {
</span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-string">"link1 Es ist ein symbolischer Link\n"</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-string">'link2'</span></span><span>)) {
</span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-string">"link2 Es ist ein symbolischer Link\n"</span></span><span>;
}
</span></span>Diese Situation kann dazu führen, dass das Programm ständig zyklische Erkennung ist, insbesondere wenn Sie eine symbolische Linkauflösung durchführen, und Sie müssen sicherstellen, dass Ihr Programm einen wiederholten Zugriff auf den Link vermeidet.
Um das Problem der symbolischen Linkschleifen zu vermeiden, können Sie RealPath verwenden, um den endgültigen Zielpfad des symbolischen Links zu erhalten. Realpath analysiert alle symbolischen Links und gibt den endgültigen Absolutweg zurück. Wenn der symbolische Link auf sich selbst zeigt oder eine Schleife bildet, gibt RealPath false zurück.
<span><span><span class="hljs-variable">$realpath</span></span><span> = </span><span><span class="hljs-title function_ invoke__">realpath</span></span><span>(</span><span><span class="hljs-string">'link1'</span></span><span>);
</span><span><span class="hljs-keyword">if</span></span><span> (</span><span><span class="hljs-variable">$realpath</span></span><span> === </span><span><span class="hljs-literal">false</span></span><span>) {
</span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-string">"Symbolverbindungsschleife oder nicht erreichbar\n"</span></span><span>;
} </span><span><span class="hljs-keyword">else</span></span><span> {
</span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-string">"符号链接最终Orientierung: <span class="hljs-subst">$realpath</span></span></span><span>\n";
}
</span></span>Im Dateisystem ist die Behandlung symbolischer Links und Verzeichnisverbindungen geringfügig unterschiedlich. In Linux -Systemen kann is_link beispielsweise symbolische Links korrekt identifizieren, aber bei einigen Betriebssystemen wie Windows kann das Verhalten symbolischer Links variieren. Wenn Ihr Programm auf verschiedenen Plattformen ausgeführt werden muss, wird empfohlen, bei Verwendung von IS_LINK Urteile auf dem Betriebssystem zu fällen, um eine plattformübergreifende Kompatibilität zu gewährleisten.
<span><span><span class="hljs-keyword">if</span></span><span> (PHP_OS === </span><span><span class="hljs-string">'WINNT'</span></span><span>) {
</span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-string">"existierenWindowsAuf der Plattform,Das Verhalten symbolischer Verbindungen kann mit dem zusammenhängenLinuxanders。\n"</span></span><span>;
}
</span></span>IS_LINK und IS_DIR werden häufig zusammen verwendet, aber es gibt Unterschiede im Verhalten zwischen den beiden Funktionen. IS_LINK prüft nur, ob der Pfad ein symbolischer Link ist, während IS_DIR überprüft, ob der Pfad ein Verzeichnis ist. Wenn Sie feststellen möchten, ob ein symbolischer Link auf ein Verzeichnis zeigt, können Sie IS_LINK und IS_DIR verwenden, um ein Urteil zu fällen:
<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">if</span></span><span> (</span><span><span class="hljs-title function_ invoke__">is_dir</span></span><span>(</span><span><span class="hljs-title function_ invoke__">realpath</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">"符号链接Orientierung一个目录\n"</span></span><span>;
} </span><span><span class="hljs-keyword">else</span></span><span> {
</span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-string">"符号链接Orientierung非目录路径\n"</span></span><span>;
}
}
</span></span>Obwohl die IS_LINK -Funktion bei der Beurteilung symbolischer Links sehr einfach und effektiv ist, müssen noch einige Details beachtet werden, wenn es um Verzeichnisverbindungen geht. Insbesondere Probleme wie z. B. Rundlinks, Plattformunterschiede, Link -Zielberechtigungen usw. Um die Robustheit des Programms zu gewährleisten, wird empfohlen, sie mit anderen Funktionen (wie Realpath , IS_DIR , IS_READABLE usw.) zu verwenden, wenn Sie IS_Link verwenden, um gemeinsame Fallstricke zu vermeiden und eine genaue Handhabung symbolischer Links sicherzustellen.