Lors du développement d'applications PHP sur toutes les plateformes, les développeurs ignorent souvent les différences dans les règles de chemin de fichier sous-jacentes du système d'exploitation, et Pathinfo () , une fonction utilisée pour analyser les chemins de fichier, peut également fonctionner différemment en raison des différences du système. Bien que PHP lui-même soit conçu comme un langage multiplateforme, certains détails des différences entre Windows et Linux sont toujours nécessaires lors du traitement des chemins de fichier. Cet article explorera les différences de performances et les problèmes de compatibilité qui peuvent être rencontrés lors de l'utilisation de Pathinfo () sur Windows et Linux Systems.
Pathinfo () est une fonction intégrée en PHP qui analyse les chaînes de chemin et renvoie les composants des chemins de fichier, tels que les noms de répertoire, les noms de fichiers de base, les extensions, etc. L'utilisation de base est la suivante:
<span><span><span class="hljs-variable">$info</span></span><span> = </span><span><span class="hljs-title function_ invoke__">pathinfo</span></span><span>(</span><span><span class="hljs-string">'/path/to/file.txt'</span></span><span>);
</span><span><span class="hljs-title function_ invoke__">print_r</span></span><span>(</span><span><span class="hljs-variable">$info</span></span><span>);
</span></span>
Résultat de sortie:
<span><span><span class="hljs-title function_ invoke__">Array</span></span><span>
(
[dirname] => /path/to
[basename] => file.txt
[extension] => txt
[filename] => file
)
</span></span>
Windows utilise une barre arrière \ comme séparateur de chemin, tandis que Linux utilise Forward Slash / . Bien que PHP reconnaisse et traite automatiquement ces séparateurs dans la plupart des fonctions, il y a encore des détails qui peuvent provoquer le comportement de Pathinfo () .
PHP adapte généralement ces deux séparateurs lors de l'analyse des chemins. Par exemple:
<span><span><span class="hljs-variable">$windowsPath</span></span><span> = </span><span><span class="hljs-string">'C:\Users\Public\file.txt'</span></span><span>;
</span><span><span class="hljs-variable">$info</span></span><span> = </span><span><span class="hljs-title function_ invoke__">pathinfo</span></span><span>(</span><span><span class="hljs-variable">$windowsPath</span></span><span>);
</span></span>
Même si vous utilisez \ , PHP peut analyser correctement le chemin dans la plupart des environnements. Mais il convient de noter que \ sous Windows est un caractère d'échappement , il doit donc être écrit comme «C: \\ Users \\ public \\ file.txt» dans le code, sinon cela peut conduire à un comportement inattendu.
La gestion du chemin ci-dessus (si le chemin existe) dans les systèmes Linux peut également être résolu avec succès, mais il n'est pas logiquement recommandé de passer dans les chemins de format Windows dans Linux.
Le chemin racine dans Linux est comme /var/www/html/index.php , et son répertoire racine est / . Dans Windows, le chemin a généralement une lettre d'entraînement, telle que c: \ xampp \ htdocs \ index.php .
Dans Windows, Pathinfo () peut toujours traiter correctement les chemins contenant des lettres de lecteur, mais le dirname renvoyé comprendra la pièce de lettre de lecteur:
<span><span><span class="hljs-title function_ invoke__">Array</span></span><span>
(
[dirname] => </span><span><span class="hljs-attr">C</span></span><span>:\xampp\htdocs
[basename] => index.php
[extension] => php
[filename] => index
)
</span></span>
Dans Linux, il n'y a pas de lettre de conduite et le chemin est plus simple.
Les systèmes de fichiers Windows utilisent souvent le codage UTF-16, tandis que Linux utilise généralement UTF-8. Dans la plupart des environnements PHP modernes, Pathinfo () prend en charge les caractères non ASCII dans les noms de fichiers, mais dans des versions antérieures ou des systèmes à tort incorrectement configurés, l'analyse brouillée ou incomplète peut se produire.
Il est recommandé de s'assurer que le système d'exploitation, le PHP et les éditeurs utilisent un codage uniforme, de préférence UTF-8 en ce qui concerne les chemins multilingues.
Un autre piège commun est / ou \ à la fin du chemin:
<span><span><span class="hljs-variable">$info</span></span><span> = </span><span><span class="hljs-title function_ invoke__">pathinfo</span></span><span>(</span><span><span class="hljs-string">'/var/www/html/'</span></span><span>);
</span></span>
Le résultat renvoyé pour le moment est dirname , car la fin ressemble à un répertoire, PHP n'est pas considéré comme un chemin de fichier, le nom de base et d'autres champs peuvent être manquants. Cela fonctionne de manière cohérente sur différents systèmes d'exploitation, mais il erre souvent lors de l'épissage dynamiquement, en particulier sur Windows:
<span><span><span class="hljs-variable">$path</span></span><span> = </span><span><span class="hljs-string">'C:\\xampp\\htdocs\\'</span></span><span>; </span><span><span class="hljs-comment">// Faites attention à la barre arrière de la queue</span></span><span>
</span><span><span class="hljs-variable">$info</span></span><span> = </span><span><span class="hljs-title function_ invoke__">pathinfo</span></span><span>(</span><span><span class="hljs-variable">$path</span></span><span>); </span><span><span class="hljs-comment">// Le résultat de l'analyse peut être incomplet</span></span><span>
</span></span>
Par conséquent, avant d'appeler Pathinfo () , vous devez vous assurer que le chemin est un fichier spécifique, pas un chemin de répertoire.
Format de chemin unifié : essayez d'utiliser Forward Slash / , qui fonctionne même sur Windows. PHP se convertira automatiquement au format d'adaptation système.
Utilisez RealPath () pour prétraiter les chemins : realPath () renvoie un chemin absolu et normalise le format, ce qui aide à améliorer la compatibilité.
Empêchez la mauvaise utilisation du délimiteur du chemin : avant de passer Pathinfo () , vous pouvez utiliser rtrim () pour supprimer l'extrémité / ou \ .
Faites attention à l'uniformité du codage : assurez-vous que la chaîne de chemin est traitée dans le cadre de l'encodage UTF-8 pour éviter les problèmes de code brouillé.
Code lié au chemin de test dans un environnement multiplateforme : Évitez de travailler sur un système pendant le développement et les problèmes sur un autre système pendant le déploiement.
Pathinfo () est une fonction en PHP qui semble simple mais est sujette aux problèmes dans les environnements multiplateformes. Bien qu'il puisse s'adapter automatiquement au format de chemin de différents systèmes dans la plupart des cas, les développeurs ne peuvent pas compter entièrement sur leur traitement "intelligent". Ils doivent normaliser activement l'entrée du chemin et comprendre les différences dans le système de fichiers sous-jacent, afin d'écrire des programmes PHP plus robustes et portables.