Hash_HMAC_FILE () muss den Inhalt der angegebenen Datei lesen, um den Hash -Wert zu berechnen. Wenn die Datei nicht genügend Leseberechtigungen enthält, gibt PHP einen Fehler zurück oder kann nicht korrekt ausgeführt werden.
<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>
Stellen Sie sicher, dass die Leseberechtigungen der Datei korrekt festgelegt sind. Sie können Dateiberechtigungen überprüfen, indem Sie den Befehl folgen:
<span><span><span class="hljs-built_in">ls</span></span><span> -l /path/to/file
</span></span>
Wenn die Datei keine Leserlaubnis hat, können Sie die Dateiberechtigungen über den CHMOD -Befehl ändern:
<span><span><span class="hljs-built_in">chmod</span></span><span> 644 /path/to/file
</span></span>
Wenn Sie Ihren Code in einem gemeinsam genutzten Hosting oder einer Umgebung ausführen, in der Open_Basedir -Beschränkungen verwendet werden, stellen Sie sicher, dass sich der Dateipfad innerhalb des zulässigen Verzeichnisbereichs befindet. Diese Einstellung kann durch Ändern von Php.ini oder Kontakt mit dem Systemadministrator eingestellt werden.
Open_Basedir ist ein Sicherheitsmechanismus in PHP, der die Dateipfade einschränkt, auf die Skripte zugreifen können. Wenn sich die Datei außerhalb der Open_Basedir -Grenze befindet, kann Hash_HMAC_FILE () nicht auf die Datei zugreifen, was zu einem Fehler führt.
<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>
Überprüfen Sie die Einstellungen von Open_Basedir in php.ini, um sicherzustellen, dass der Pfad zur zugänglichen Datei innerhalb des zulässigen Verzeichnisses liegt.
Wenn es sich um eine gemeinsam genutzte Hosting -Umgebung handelt und PHP.ini nicht ändern kann, können Sie versuchen, die Datei in das Verzeichnis zu verschieben, auf das Sie zugreifen dürfen, oder den Host -Service -Anbieter kontaktieren, um die Einstellungen von Open_Basedir anzupassen.
Dateipfadfehler sind einer der häufigsten Gründe, warum Hash_HMAC_FILE () nicht ordnungsgemäß funktioniert. Pfadfehler können durch unsachgemäße Konfiguration relativer oder absoluter Pfade verursacht werden.
<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>
Stellen Sie sicher, dass der an Hash_HMAC_FILE () übergebene Pfad korrekt ist. Wenn Sie einen relativen Pfad verwenden, stellen Sie sicher, dass das aktuelle Arbeitsverzeichnis ( getCwd () ) mit dem tatsächlichen Speicherort der Datei übereinstimmt.
Versuchen Sie, absolute Pfade zu verwenden, um Pfadprobleme zu vermeiden. Zum Beispiel:
<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>
Bevor Sie Hash_HMAC_FILE () aufrufen, ist es am besten zu bestätigen, ob die Datei vorliegt. Wenn die Datei nicht vorhanden ist, erhöht der Aufruf von Hash_HMAC_FILE () direkt einen Fehler.
Verwenden Sie die Funktion "File_Exists (), um zu überprüfen, ob die Datei vorliegt:
<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>
Zusätzlich zu den Berechtigungen der Datei selbst müssen Benutzer, die PHP-Skripte (z. B. www-data ) ausführen, auch über ausreichende Leseberechtigungen für die Datei verfügen. Hash_HMAC_FILE () fällt auch fehl, wenn der PHP -Prozess nicht die Erlaubnis zum Lesen der Datei enthält.
Stellen Sie sicher, dass Benutzer des PHP -Prozesses Berechtigungen für die Datei gelesen haben. Sie können Benutzer von PHP -Prozessen über den folgenden Befehl überprüfen:
<span><span>ps aux | grep php
</span></span>
Wenn der PHP -Prozess keine Berechtigungen hat, ändern Sie den Befehl chown , um den Eigentümer der Datei in den PHP -Prozessbenutzer zu ändern:
<span><span>sudo </span><span><span class="hljs-built_in">chown</span></span><span> www-data:www-data /path/to/file
</span></span>
Wenn ein unbekannter Fehler auftritt, können Sie das Problem debuggen, indem Sie PHP -Fehlerberichterstattung aktivieren. Durch das Hinzufügen des folgenden Codes oben im Skript können Fehlermeldungen erfasst und angezeigt werden:
<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>
Nach der Aktivierung der Fehlerberichterstattung zeigt PHP detaillierte Fehlerinformationen an, um das Problem schnell zu finden.