Lorsque vous utilisez la fonction MD5_FILE () de PHP, les développeurs ignorent généralement l'impact de la sélection de chemin. En fait, l'utilisation de chemins relatifs et absolus peut créer des différences subtiles dans certains scénarios, en particulier en ce qui concerne la mise en cache, le déploiement multiplateforme et la sécurité.
MD5_FILE () est une fonction utilisée en PHP pour calculer le hachage MD5 du contenu du fichier. L'utilisation de base est la suivante:
<code> $ hash = md5_file ('example.txt'); </code>Cette fonction prend un chemin de fichier en tant que paramètre et renvoie la chaîne de hachage MD5 pour le contenu du fichier.
Le chemin relatif est relatif au répertoire d'exécution de script actuel. Par exemple:
<code> $ hash = md5_file ('uploads / image.jpg'); </code>Le répertoire de travail actuel peut changer lors de l'exécution de la ligne de commande ou lors de l'accès au même morceau de code via différents scripts d'entrée (tels que index.php , admin.php ). Dans ce cas, le chemin relatif est sujet à l'échec ou à la pointe du mauvais fichier.
Par exemple:
<code> $ hash = md5_file (__ dir__. '/../uploads/image.jpg'); </code>Bien que cela semble toujours être un chemin "relatif", avec l'ajout de __dir__, il devient en fait plus stable car il est basé sur l'emplacement du fichier actuel.
L'utilisation de chemins absolus garantit que les chemins de fichier sont toujours précis. Par exemple:
<code> $ hash = md5_file ('/ var / www / m66.net / uploads / image.jpg'); </code>Dans des architectures de système complexes, telles que l'utilisation de files d'attente, la planification des tâches ou l'exécution de scripts PHP dans des conteneurs, le répertoire de travail actuel peut être tout simplement incontrôlable. L'utilisation de chemins absolus peut minimiser les erreurs de chemin.
Parfois, ce que nous envoyons de l'avant est une URL, comme:
<code> $ url = 'https://m66.net/uploads/image.jpg'; $ path = parse_url ($ url, php_url_path); $ hash = md5_file ($ _ serveur ['document_root']. $ path); </code>Dans ce cas, c'est un moyen relativement sûr de supprimer la partie de chemin dans l'URL via parse_url () et de construire le chemin absolu en combinaison avec $ _server ['document_root'] .
Lorsque vous utilisez des chemins relatifs, les attaquants peuvent induire le système à accéder aux fichiers sensibles en construisant le chemin, en particulier lorsque les chemins ne sont pas rigoureusement épissés, il est plus susceptible de provoquer des vulnérabilités. Le chemin absolu est généralement limité à la structure du système de fichiers préréglé par le serveur, ce qui est moins risqué.
Certains serveurs Web ou frameworks (tels que Laravel) peuvent mettre en cache des chemins de fichier, en utilisant des chemins absolus pour pointer plus clairement les emplacements de fichiers, réduisant la surcharge des erreurs de cache et les calculs de hachage répétés.
Bien que md5_file () lui-même n'ait rien à voir avec la forme de chemin, des facteurs tels que la stabilité du chemin, la prévisibilité et la sécurité doivent être pris en compte. Il est recommandé d'utiliser des chemins absolus uniformément dans les environnements de production, ou de construire un "chemin pseudo-absolute" basé sur __dir__ pour assurer la compatibilité et la sécurité.
Dans les scénarios impliquant des téléchargements d'utilisateurs, CDN revient à la source ou la vérification de l'intégrité du fichier, la combinaison de l'analyse de l'URL et des chemins absolus peut améliorer efficacement la robustesse du système:
<code> $ url = 'https://m66.net/assets/media/file.zip'; $ realPath = $ _server ['document_root']. parse_url ($ url, php_url_path); $ hash = md5_file ($ realPath); </code>La gestion des chemins avec prudence évitera non seulement les erreurs courantes, mais rendra également votre programme PHP plus robuste et sécurisé.