Um Fehler in der Symlink () -Funktion besser zu fangen und zu behandeln, bietet PHP verschiedene Methoden zur Implementierung der Fehlerbehandlung. Im Folgenden werden wir mehrere gängige Methoden einführen.
Der einfachste Weg, Fehler zu fangen, besteht darin, PHPs @ -Fehlersuppressor zu verwenden, wodurch die Ausgabe von Fehlermeldungen vermieden werden kann.
<span><span><span class="hljs-meta"><?php</span></span><span>
</span><span><span class="hljs-keyword">if</span></span><span> (@</span><span><span class="hljs-title function_ invoke__">symlink</span></span><span>(</span><span><span class="hljs-variable">$target</span></span><span>, </span><span><span class="hljs-variable">$link</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">"Versäumte es, einen symbolischen Link zu erstellen。"</span></span><span>;
}
</span><span><span class="hljs-meta">?></span></span><span>
</span></span>
Diese Methode ist rau, sie unterdrückt alle PHP -Fehler, liefert jedoch keine spezifischen Informationen über den Fehler. Daher wird es nicht als einzige Fehlerbehandlungsmethode empfohlen, insbesondere in Entwicklungsumgebungen.
Wenn Sie den Fehlersuppressor nicht verwenden möchten, sondern die Fehlermeldung erfassen möchten, können Sie die Funktion "ERROR_GET_LAST () verwenden, um die letzte Fehlermeldung nach dem Aufrufen von Symlink () zu erhalten.
<span><span><span class="hljs-meta"><?php</span></span><span>
</span><span><span class="hljs-keyword">if</span></span><span> (</span><span><span class="hljs-title function_ invoke__">symlink</span></span><span>(</span><span><span class="hljs-variable">$target</span></span><span>, </span><span><span class="hljs-variable">$link</span></span><span>) === </span><span><span class="hljs-literal">false</span></span><span>) {
</span><span><span class="hljs-variable">$error</span></span><span> = </span><span><span class="hljs-title function_ invoke__">error_get_last</span></span><span>();
</span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-string">"Versäumte es, einen symbolischen Link zu erstellen,Fehlermeldung:"</span></span><span>.</span><span><span class="hljs-variable">$error</span></span><span>[</span><span><span class="hljs-string">'message'</span></span><span>];
}
</span><span><span class="hljs-meta">?></span></span><span>
</span></span>
Diese Methode kann ein assoziatives Array zurückgeben, das Details zum letzten Fehler enthält, z. B. die Fehlermeldung und die Dateizeilennummer, in der der Fehler aufgetreten ist.
Obwohl Symlink () selbst keine Ausnahmen auswirft, können Sie beim Aufrufen von Symlink () Ausnahmen manuell werfen, um eine flexiblere Fehlerbehandlung zu erzielen.
<span><span><span class="hljs-meta"><?php</span></span><span>
</span><span><span class="hljs-function"><span class="hljs-keyword">function</span></span></span><span> </span><span><span class="hljs-title">createSymlink</span></span><span>(</span><span><span class="hljs-params"><span class="hljs-variable">$target</span></span></span><span>, </span><span><span class="hljs-variable">$link</span></span><span>) {
</span><span><span class="hljs-keyword">if</span></span><span> (</span><span><span class="hljs-title function_ invoke__">symlink</span></span><span>(</span><span><span class="hljs-variable">$target</span></span><span>, </span><span><span class="hljs-variable">$link</span></span><span>) === </span><span><span class="hljs-literal">false</span></span><span>) {
</span><span><span class="hljs-keyword">throw</span></span><span> </span><span><span class="hljs-keyword">new</span></span><span> </span><span><span class="hljs-built_in">Exception</span></span><span>(</span><span><span class="hljs-string">"Symbolische Links können nicht erstellen:"</span></span><span>.</span><span><span class="hljs-variable">$link</span></span><span>);
}
}
</span><span><span class="hljs-keyword">try</span></span><span> {
</span><span><span class="hljs-title function_ invoke__">createSymlink</span></span><span>(</span><span><span class="hljs-variable">$target</span></span><span>, </span><span><span class="hljs-variable">$link</span></span><span>);
} </span><span><span class="hljs-keyword">catch</span></span><span> (</span><span><span class="hljs-built_in">Exception</span></span><span> </span><span><span class="hljs-variable">$e</span></span><span>) {
</span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-string">"Fehler: "</span></span><span> . </span><span><span class="hljs-variable">$e</span></span><span>-></span><span><span class="hljs-title function_ invoke__">getMessage</span></span><span>();
}
</span><span><span class="hljs-meta">?></span></span><span>
</span></span>
Durch die Verwendung der Try-Catch -Struktur kann die Fehlerbehandlung klarer werden und verschiedene Handhabungsmethoden für verschiedene Arten von Fehlern bereitstellen.
In einer Produktionsumgebung ist es nicht immer geeignet, Fehlermeldungen für den Benutzer direkt auszugeben, insbesondere wenn die Sicherheit beteiligt ist. Sie können auswählen, ob Sie Fehler in Protokolldateien anmelden können, die den Entwicklern ermöglichen, im Hintergrund zu überprüfen und zu debuggen.
<span><span><span class="hljs-meta"><?php</span></span><span>
</span><span><span class="hljs-keyword">if</span></span><span> (</span><span><span class="hljs-title function_ invoke__">symlink</span></span><span>(</span><span><span class="hljs-variable">$target</span></span><span>, </span><span><span class="hljs-variable">$link</span></span><span>) === </span><span><span class="hljs-literal">false</span></span><span>) {
</span><span><span class="hljs-title function_ invoke__">error_log</span></span><span>(</span><span><span class="hljs-string">"Versäumte es, einen symbolischen Link zu erstellen: "</span></span><span>.</span><span><span class="hljs-title function_ invoke__">error_get_last</span></span><span>()[</span><span><span class="hljs-string">'message'</span></span><span>], </span><span><span class="hljs-number">3</span></span><span>, </span><span><span class="hljs-string">"/var/log/php_errors.log"</span></span><span>);
}
</span><span><span class="hljs-meta">?></span></span><span>
</span></span>
Diese Methode gibt den Benutzer keine Fehlerinformationen vor, schreibt sie jedoch in die Fehlerprotokolldatei des Servers, die für die Fehlerverfolgung in Produktionsumgebungen geeignet ist.
Bevor Sie versuchen, einen symbolischen Link zu erstellen, sollten Sie sicherstellen, dass das PHP -Skript eine ausreichende Erlaubnis hat, auf den Zielpfad und den Linkpfad zuzugreifen. Sie können die Funktion is_writable () verwenden, um zu überprüfen, ob eine Datei oder ein Verzeichnis beschreibbar ist:
<span><span><span class="hljs-meta"><?php</span></span><span>
</span><span><span class="hljs-keyword">if</span></span><span> (!</span><span><span class="hljs-title function_ invoke__">is_writable</span></span><span>(</span><span><span class="hljs-variable">$target</span></span><span>)) {
</span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-string">"Die Zieldatei kann nicht geschrieben werden,Bitte überprüfen Sie die Berechtigungen!"</span></span><span>;
</span><span><span class="hljs-keyword">exit</span></span><span>;
}
</span></span>
Es ist sehr wichtig sicherzustellen, dass die Zieldatei oder das Verzeichnis vorhanden ist, insbesondere wenn Sie symbolische Links erstellen. Sie können die Funktionen File_Exists () oder is_file () verwenden, um die Existenz der Zieldatei zu überprüfen.
<span><span><span class="hljs-meta"><?php</span></span><span>
</span><span><span class="hljs-keyword">if</span></span><span> (!</span><span><span class="hljs-title function_ invoke__">file_exists</span></span><span>(</span><span><span class="hljs-variable">$target</span></span><span>)) {
</span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-string">"Die Zieldatei existiert nicht,Symbolische Links können nicht erstellen!"</span></span><span>;
</span><span><span class="hljs-keyword">exit</span></span><span>;
}
</span></span>
Bevor Sie einen symbolischen Link erstellen, überprüfen Sie am besten, ob der symbolische Linkpfad bereits vorhanden ist. Wenn der Zielpfad bereits vorhanden ist und kein symbolischer Glied ist, schlägt die Erstellungsoperation fehl. Sie können is_link () verwenden, um zu überprüfen, ob es sich bereits um einen symbolischen Link handelt.
<span><span><span class="hljs-meta"><?php</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">$link</span></span><span>)) {
</span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-string">"Symbol -Link existiert bereits!"</span></span><span>;
</span><span><span class="hljs-keyword">exit</span></span><span>;
}
</span></span>