hash_hmac_file () doit lire le contenu du fichier spécifié pour calculer la valeur de hachage. Si le fichier a des autorisations de lecture insuffisantes, PHP renvoie une erreur ou ne parvient pas à s'exécuter correctement.
<span><span><span class="hljs-built_in">Warning</span></span><span>: hash_hmac_file() [</span><span><span class="hljs-keyword">function</span></span><span>.hash-hmac-file]: open_basedir restriction </span><span><span class="hljs-keyword">in</span></span><span> effect. File(/</span><span><span class="hljs-type">path</span></span><span>/</span><span><span class="hljs-keyword">to</span></span><span>/file) </span><span><span class="hljs-keyword">is</span></span><span> </span><span><span class="hljs-keyword">not</span></span><span> </span><span><span class="hljs-keyword">within</span></span><span> the allowed path(s)
</span></span>
Assurez-vous que les autorisations de lecture du fichier sont correctement définies. Vous pouvez vérifier les autorisations de fichiers par commande suivante:
<span><span><span class="hljs-built_in">ls</span></span><span> -l /path/to/file
</span></span>
Si le fichier n'a pas d'autorisation de lecture, vous pouvez modifier les autorisations de fichier via la commande chmod :
<span><span><span class="hljs-built_in">chmod</span></span><span> 644 /path/to/file
</span></span>
De plus, si vous exécutez votre code dans un hébergement partagé ou un environnement qui utilise des restrictions Open_Basedir , assurez-vous que le chemin du fichier se situe dans la portée du répertoire autorisé. Ce paramètre peut être ajusté en modifiant PHP.ini ou en contactant l'administrateur système.
Open_Basedir est un mécanisme de sécurité en PHP qui restreint les chemins de fichier auxquels les scripts peuvent accéder. Lorsque le fichier est en dehors de la limite Open_Basedir , hash_hmac_file () ne peut pas accéder au fichier, ce qui entraîne une erreur.
<span><span><span class="hljs-built_in">Warning</span></span><span>: hash_hmac_file() [</span><span><span class="hljs-keyword">function</span></span><span>.hash-hmac-file]: open_basedir restriction </span><span><span class="hljs-keyword">in</span></span><span> effect. File(/</span><span><span class="hljs-type">path</span></span><span>/</span><span><span class="hljs-keyword">to</span></span><span>/file) </span><span><span class="hljs-keyword">is</span></span><span> </span><span><span class="hljs-keyword">not</span></span><span> </span><span><span class="hljs-keyword">within</span></span><span> the allowed path(s)
</span></span>
Vérifiez les paramètres Open_Basedir dans php.ini pour vous assurer que le chemin vers le fichier à accéder est dans le répertoire autorisé.
S'il s'agit d'un environnement d'hébergement partagé et ne peut pas modifier PHP.ini , vous pouvez essayer de déplacer le fichier vers le répertoire auquel vous êtes autorisé à accéder ou à contacter le fournisseur de service hôte pour ajuster les paramètres Open_Basedir .
Les erreurs de chemin de fichier sont l'une des raisons courantes pour lesquelles hash_hmac_file () ne fonctionne pas correctement. Les erreurs de chemin peuvent être causées par une mauvaise configuration des chemins relatifs ou absolus.
<span><span><span class="hljs-built_in">Warning</span></span><span>: hash_hmac_file(/invalid/</span><span><span class="hljs-type">path</span></span><span>/</span><span><span class="hljs-keyword">to</span></span><span>/file): failed </span><span><span class="hljs-keyword">to</span></span><span> </span><span><span class="hljs-keyword">open</span></span><span> stream: </span><span><span class="hljs-keyword">No</span></span><span> such file </span><span><span class="hljs-keyword">or</span></span><span> directory
</span></span>
Assurez-vous que le chemin passé à hash_hmac_file () est exact. Si vous utilisez un chemin relatif, assurez-vous que le répertoire de travail actuel ( getCWD () ) correspond à l'emplacement de stockage réel du fichier.
Essayez d'utiliser des chemins absolus pour éviter les problèmes de chemin. Par exemple:
<span><span><span class="hljs-variable">$file_path</span></span><span> = </span><span><span class="hljs-string">'/var/www/html/uploads/myfile.txt'</span></span><span>;
</span><span><span class="hljs-variable">$secret_key</span></span><span> = </span><span><span class="hljs-string">'your-secret-key'</span></span><span>;
</span><span><span class="hljs-variable">$hash</span></span><span> = </span><span><span class="hljs-title function_ invoke__">hash_hmac_file</span></span><span>(</span><span><span class="hljs-string">'sha256'</span></span><span>, </span><span><span class="hljs-variable">$file_path</span></span><span>, </span><span><span class="hljs-variable">$secret_key</span></span><span>);
</span></span>
Avant d'appeler hash_hmac_file () , il est préférable de confirmer si le fichier existe. Si le fichier n'existe pas, l'appel hash_hmac_file () augmentera directement une erreur.
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/file'</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-variable">$hash</span></span><span> = </span><span><span class="hljs-title function_ invoke__">hash_hmac_file</span></span><span>(</span><span><span class="hljs-string">'sha256'</span></span><span>, </span><span><span class="hljs-variable">$file_path</span></span><span>, </span><span><span class="hljs-variable">$secret_key</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">"File does not exist!"</span></span><span>;
}
</span></span>
En plus des autorisations du fichier lui-même, les utilisateurs exécutant des scripts PHP (tels que www-data ) doivent également avoir des autorisations de lecture suffisantes pour le fichier. Hash_hmac_file () échoue également si le processus PHP n'a pas l'autorisation de lire le fichier.
Assurez-vous que les utilisateurs du processus PHP ont des autorisations de lecture du fichier. Vous pouvez vérifier les utilisateurs des processus PHP en utilisant la commande suivante:
<span><span>ps aux | grep php
</span></span>
Si le processus PHP n'a pas d'autorisations, utilisez la commande chown pour modifier le propriétaire du fichier en utilisateur de processus PHP:
<span><span>sudo </span><span><span class="hljs-built_in">chown</span></span><span> www-data:www-data /path/to/file
</span></span>
Si une erreur inconnue se produit, vous pouvez déboguer le problème en activant les rapports d'erreur PHP. L'ajout du code suivant en haut du script peut aider à capturer et à afficher les messages d'erreur:
<span><span><span class="hljs-title function_ invoke__">ini_set</span></span><span>(</span><span><span class="hljs-string">'display_errors'</span></span><span>, </span><span><span class="hljs-number">1</span></span><span>);
</span><span><span class="hljs-title function_ invoke__">error_reporting</span></span><span>(E_ALL);
</span></span>
Après avoir activé les rapports d'erreur, PHP affichera des informations d'erreur détaillées pour vous aider à localiser rapidement le problème.