Afin de mieux capter et gérer les erreurs dans la fonction SymLink () , PHP fournit plusieurs méthodes pour implémenter la gestion des erreurs. Ci-dessous, nous présenterons plusieurs méthodes courantes.
La façon la plus simple de capturer les erreurs est d'utiliser le suppresseur d' erreur de PHP, ce qui peut éviter de diffuser les messages d'erreur.
<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">"Échec de la création d'un lien symbolique。"</span></span><span>;
}
</span><span><span class="hljs-meta">?></span></span><span>
</span></span>
Cette méthode est rugueuse, elle supprime toutes les erreurs PHP, mais elle ne fournit pas d'informations spécifiques sur l'erreur. Par conséquent, il n'est pas recommandé comme la seule méthode de gestion des erreurs, en particulier dans les environnements de développement.
Si vous ne souhaitez pas utiliser le suppresseur d'erreur mais que vous souhaitez capturer le message d'erreur, vous pouvez utiliser la fonction error_get_last () pour obtenir le dernier message d'erreur après avoir appelé SymLink () .
<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">"Échec de la création d'un lien symbolique,message d'erreur:"</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>
Cette méthode peut renvoyer un tableau associatif contenant des détails de la dernière erreur, tels que le message d'erreur et le numéro de ligne de fichier où l'erreur s'est produite.
Bien que SymLink () lui-même ne lance pas des exceptions, vous pouvez lancer manuellement des exceptions lorsque vous appelez SymLink () pour obtenir une gestion des erreurs plus flexible.
<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">"Impossible de créer des liens symboliques:"</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">"erreur: "</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>
L'utilisation de la structure de capture d'essai peut rendre la gestion des erreurs plus claire et peut fournir différentes méthodes de manutention pour différents types d'erreurs.
Dans un environnement de production, il n'est pas toujours approprié de produire directement des messages d'erreur à l'utilisateur, en particulier lorsque la sécurité est impliquée. Vous pouvez choisir de journaliser les erreurs dans les fichiers journaux, ce qui facilite les développeurs à vérifier et à déboguer en arrière-plan.
<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">"Échec de la création d'un lien symbolique: "</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>
Cette méthode n'expose pas les informations d'erreur à l'utilisateur, mais l'écrit au fichier journal des erreurs du serveur, qui convient au suivi des erreurs dans les environnements de production.
Avant d'essayer de créer un lien symbolique, vous devez vous assurer que le script PHP a une autorisation suffisante pour accéder au chemin cible et au chemin de liaison. Vous pouvez utiliser la fonction is_witable () pour vérifier si un fichier ou un répertoire est écrit:
<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">"Le fichier cible ne peut pas être écrit,Veuillez vérifier les autorisations!"</span></span><span>;
</span><span><span class="hljs-keyword">exit</span></span><span>;
}
</span></span>
Il est très important de s'assurer que le fichier cible ou le répertoire existe, en particulier lorsque vous créez des liens symboliques. Vous pouvez utiliser les fonctions file_exists () ou is_file () pour vérifier l'existence du fichier cible.
<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">"Le fichier cible n'existe pas,Impossible de créer des liens symboliques!"</span></span><span>;
</span><span><span class="hljs-keyword">exit</span></span><span>;
}
</span></span>
Avant de créer un lien symbolique, il est préférable de vérifier si le chemin du lien symbolique existe déjà. Si le chemin cible existe déjà et n'est pas un lien symbolique, l'opération de création échouera. Vous pouvez utiliser is_link () pour vérifier s'il s'agit déjà d'un lien symbolique.
<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">"Le lien de symbole existe déjà!"</span></span><span>;
</span><span><span class="hljs-keyword">exit</span></span><span>;
}
</span></span>