PHPでは、多くの場合、ファイルが存在するかどうかを判断し、ファイルが有効であるかどうかをさらに確認する必要があります。 file_exists()は、指定されたパスにファイルが存在するかどうかをすばやく決定できる非常に一般的な関数です。ただし、ファイルの存在だけが、そのコンテンツが私たちが期待するものであるという意味ではありません。この時点で、 MD5_FILE()を組み合わせてコンテンツ検証を実行できます。
まず、 file_exists()の基本的な使用方法を見てみましょう。
$filePath = '/path/to/your/file.txt';
if (file_exists($filePath)) {
echo "ファイルが存在します。";
} else {
echo "ファイルは存在しません。";
}
この関数は、パスにファイルがあるかどうかを単に決定します。このファイルが予想されるファイルであるかどうかをさらに判断する必要がある場合は、 md5_file()でmd5値を計算して確認できます。
$expectedHash = '5d41402abc4b2a76b9719d911017c592'; // 予想されるファイルハッシュ値
$actualHash = md5_file($filePath);
if ($actualHash === $expectedHash) {
echo "ファイルは有効であり、改ざんされていません。";
} else {
echo "ファイルは変更または破損する場合があります。";
}
https://m66.net/files/update.zipから圧縮パッケージをダウンロードした場合、ファイルが正常にダウンロードされ、途中で変更されていないことを確認する必要があります。現時点では、 md5_file()と組み合わせてfile_exists()を使用できます。
$url = 'https://m66.net/files/update.zip';
$localPath = __DIR__ . '/downloads/update.zip';
$expectedMd5 = 'c4ca4238a0b923820dcc509a6f75849b'; // サーバーからハッシュ値をファイルします
if (file_exists($localPath)) {
if (md5_file($localPath) === $expectedMd5) {
echo "ファイルが存在します且完整。";
} else {
echo "ファイルが存在します但不完整,再ダウンロードを検討してください。";
}
} else {
echo "ファイルは存在しません,最初にダウンロードしてください:$url";
}
md5_file()はファイル全体を読み取るので、大きなファイルの場合、より遅くなり、より多くのメモリを消費する可能性があります。
セキュリティ要件が高い環境では、SHA-256などのより安全なハッシュアルゴリズム(Has h_File()関数を使用して実装できます)を使用することをお勧めします。
Md5_file()は、ファイルが存在しない場合にfalseを返します。次の方法を使用して、誤判断を避けることができます。
$hash = file_exists($localPath) ? md5_file($localPath) : false;
file_exists()とmd5_file()を組み合わせることで、ファイルが存在するかどうかを効果的に判断し、その整合性を検証できます。これは、ファイルのダウンロード、キャッシュ検証、ファイルの改ざん防止などのシナリオの処理に特に適しています。ハッシュ値をチェックすることにより、ローカルファイルがサーバーまたは元のファイルと一致していることをより自信を持って確認できます。この方法はシンプルですが、非常に実用的であり、すべてのPHP開発者が習得すべき基本的なスキルの1つです。