L'une des raisons les plus courantes est les erreurs de chemin de fichier. Lors de l'appel hash_hmac_file () , le chemin du fichier doit être précis. PHP analyse le chemin du fichier en fonction du répertoire de travail actuel lors de l'exécution. Par conséquent, si le chemin entrant est incorrect ou si le chemin relatif par rapport au script actuel est incorrect, il conduira à une erreur "fichier non trouvé".
Confirmez si le chemin absolu du fichier est correct. Si vous utilisez un chemin relatif, assurez-vous qu'il s'agit du chemin correct par rapport au répertoire où se trouve actuellement le script PHP.
Utilisez la fonction realPath () pour obtenir le chemin absolu du fichier pour vous assurer que le chemin est analysé correctement.
<span><span><span class="hljs-variable">$file_path</span></span><span> = </span><span><span class="hljs-string">'path/to/your/file.txt'</span></span><span>;
</span><span><span class="hljs-variable">$absolute_path</span></span><span> = </span><span><span class="hljs-title function_ invoke__">realpath</span></span><span>(</span><span><span class="hljs-variable">$file_path</span></span><span>);
</span><span><span class="hljs-keyword">if</span></span><span> (</span><span><span class="hljs-variable">$absolute_path</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">"fichier introuvable"</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">"Le chemin absolu vers le fichier est: "</span></span><span> . </span><span><span class="hljs-variable">$absolute_path</span></span><span>;
}
</span></span>
Même si le chemin du fichier est correct, le processus PHP doit avoir des autorisations suffisantes pour accéder au fichier. Si les autorisations du fichier ne sont pas définies correctement, PHP peut ne pas être en mesure de lire le contenu du fichier, ce qui donne une erreur "Fichier non trouvé".
Vérifie si le fichier a des autorisations lisibles à l'utilisateur PHP.
Utilisez la commande CHMOD pour modifier les autorisations du fichier, afin que les utilisateurs de PHP puissent lire le fichier.
<span><span><span class="hljs-built_in">chmod</span></span><span> 644 path/to/your/file.txt
</span></span>
Si PHP s'exécute en tant qu'utilisateur de serveur Web, assurez-vous que l'utilisateur a des autorisations de lecture du fichier. Habituellement, l'utilisateur du serveur Web est www-data ou apache , et vous pouvez afficher les autorisations du fichier actuel via la commande suivante:
<span><span><span class="hljs-built_in">ls</span></span><span> -l path/to/your/file.txt
</span></span>
Il peut y avoir des restrictions sur les chemins d'accès aux fichiers dans le fichier de configuration de PHP php.ini . Par exemple, la directive Open_Basedir limite les chemins de fichier auxquels PHP peut accéder. Si Open_Basedir est restreint, PHP ne pourra pas accéder à des fichiers en dehors de la restriction.
Vérifiez si le paramètre Open_Basedir existe dans le fichier php.ini .
S'il y a une limite, modifiez le fichier php.ini , augmentez le chemin du répertoire pour accéder ou désactivez la limite Open_Basedir .
<span><span><span class="hljs-attr">open_basedir</span></span><span> = /var/www:/tmp:/usr/share/php:/path/to/your/files
</span></span>
Une fois la modification terminée, n'oubliez pas de redémarrer le serveur Web ou le service PHP-FPM.
Avant d'exécuter hash_hmac_file () , confirmez d'abord que le fichier existe. Si le fichier n'existe pas, PHP renverra une erreur "fichier non trouvé".
Avant d'appeler hash_hmac_file () , utilisez la fonction file_exists () pour vérifier si le fichier existe.
<span><span><span class="hljs-variable">$file_path</span></span><span> = </span><span><span class="hljs-string">'path/to/your/file.txt'</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">$file_path</span></span><span>)) {
</span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-string">"Le fichier n'existe pas"</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">"Le fichier existe,Continuer à traiter"</span></span><span>;
}
</span></span>
Si le fichier n'existe pas, vous devez confirmer si le chemin du fichier est correct ou si le fichier a été supprimé, déplacé ou renommé.
Si le nom de fichier contient des caractères spéciaux ou des caractères non ASCII, PHP peut ne pas identifier correctement le chemin du fichier dans certains environnements, ce qui ne peut pas être en mesure de trouver le fichier.
Assurez-vous qu'il n'y a pas de caractères illégaux dans le chemin du fichier. S'il y a des caractères spéciaux ou des caractères non ASCII, vous pouvez essayer de convertir le codage du chemin de fichier à l'aide de fonctions telles que mb_convert_encoding () ou utf8_encode () .
<span><span><span class="hljs-variable">$file_path</span></span><span> = </span><span><span class="hljs-string">'chemin/contenir/Caractères spéciaux.txt'</span></span><span>;
</span><span><span class="hljs-variable">$encoded_path</span></span><span> = </span><span><span class="hljs-title function_ invoke__">mb_convert_encoding</span></span><span>(</span><span><span class="hljs-variable">$file_path</span></span><span>, </span><span><span class="hljs-string">'UTF-8'</span></span><span>, </span><span><span class="hljs-string">'GB2312'</span></span><span>);
</span></span>
Si vous déterminez que le fichier est dans un emplacement fixe, la chose la plus sûre à faire est d'utiliser des chemins absolus au lieu de chemins relatifs. Cela évitera les erreurs de résolution de chemin en raison de différents répertoires de travail dans PHP.
Utilisez la constante __dir__ pour obtenir le chemin d'accès absolu vers le fichier actuel et combinez le chemin relatif pour assurer l'exactitude.
<span><span><span class="hljs-variable">$file_path</span></span><span> = </span><span><span class="hljs-keyword">__DIR__</span></span><span> . </span><span><span class="hljs-string">'/path/to/your/file.txt'</span></span><span>;
</span></span>