Position actuelle: Accueil> Derniers articles> Que dois-je faire lors de l'utilisation de hash_hmac_file ()? Erreurs et solutions communes

Que dois-je faire lors de l'utilisation de hash_hmac_file ()? Erreurs et solutions communes

gitbox 2025-09-08

1. Les autorisations de fichiers insuffisantes entraînent la fonction de ne pas lire le fichier

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.

Exemple d'invite d'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>

Solution:

  • 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.


2. La restriction Open_Basedir provoque l'accès au fichier à

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.

Exemple d'invite d'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>

Solution:

  • 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 .


3. Chemin de fichier incorrect

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.

Exemple d'invite d'erreur:

 <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>

Solution:

  • 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>

4. Vérifiez si le fichier existe

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.

Solution:

  • 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>

5. Assurez-vous que le processus PHP a des autorisations suffisantes

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.

Solution:

  • 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>

6. Erreur renvoyée par débogage hash_hmac_file ()

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.