md5_file()の基本的な構文は次のとおりです。
<Code> $ hash = md5_file( 'path/to/file.txt'); </code>成功した場合、32ビットヘキサデシマル文字列を返します。失敗した場合、 falseを返します。重要な点は、障害が例外を投げかけるのではなく、ブール値を偽りに戻すため、判断に注意を払う必要があります。
これが最も一般的な問題です。指定されたファイルパスが間違っている場合、またはファイルがまったく存在しない場合、 MD5_FILE()は直接失敗し、 FALSEを返します。
<code> $ hash = md5_file( '/invalid/path/to/file.txt'); if($ hash === false){echo 'ファイルパスが無効であるか、ファイルが存在しない'; } </code>トラブルシューティングの提案:
file_exists()を使用して、ファイルが実際に存在するかどうかを確認します。
ファイルが存在していても、PHPが存在するプロセスのユーザーには読み取り許可がありません。これにより、 MD5_File()が失敗します。
例:
<code> chmod( '/path/to/file.txt'、0000); //すべての権限を無効にする$ hash = md5_file( '/path/to/file.txt'); // false </code>を返しますトラブルシューティングの提案:
is_readable()を使用して、ファイルに読み取り許可があるかどうかを確認します。
Windowsシステムでは、一部のプログラムがファイルのみにアクセスしている場合、PHPがファイルの内容を読み取ることができない場合があり、誤った返品も発生する可能性があります。
トラブルシューティングの提案:
ファイルを別の場所にコピーし、 MD5_File()で読むか、他のツールを使用してロックされているかどうかを確認してください。
MD5_FILE()はストリーミングの読み取り値を使用します(すべてのファイルは一度にメモリにロードされません)が、 Memory_limitがPHP構成が低すぎる場合、大きなファイルを読むときに失敗する可能性があります。
トラブルシューティングの提案:
Memory_limit設定を適切に改善するか、コマンドラインスクリプトを使用して実行します(通常、よりリラックスした制限)。
MD5_FILE()は、URLを介してリモートファイルの読み取りをサポートしています。
<code> $ hash = md5_file( 'http://m66.net/files/sample.txt'); </code>ただし、 PHP.INIでaksow_url_fopenが有効になっている場合にのみ、このような呼び出しは成功します。このオプションが有効になっていない場合、返品値は偽です。
トラブルシューティングの提案:
構成ファイルを確認するか、コードで確認してください。
この関数は、最後のランタイムエラーに関する詳細情報を出力できます。これは、トラブルシューティングの例外に非常に役立ちます。
追跡後のエラー情報をログに記述することをお勧めします。
<code> if(($ hash = md5_file($ filepath))=== false){error_log( 'md5_file failed:'。print_r(error_get_last()、true)); } </code>ファイル自体に問題がない場合がありますが、パスエラーはパスステッチまたは可変汚染によって引き起こされます。 fopen()で試すことができます:
<code> if(!$ handle = @fopen($ filepath、 'rb')){echo 'ファイルの開き失敗'; } </code>