ファイルの整合性検証は、特にアップロード、キャッシュされたファイル、または安全な検証を処理する場合、PHP開発において非常に一般的な要件です。 MD5_FILE()関数は、ファイルのMD5ハッシュ値を計算するために使用され、シンプルで実用的なツールです。この記事では、MD5_FILE()関数の使用法を詳細に紹介し、そのアプリケーションを実際のシナリオで説明します。
MD5_FILE()は、指定されたファイルのMD5ハッシュ値を計算する内蔵PHP関数です。 MD5(Message-Digest Algorithm 5)は、ファイルコンテンツを一意に識別するために32ビットの16進列文字列を生成する広く使用されているハッシュ関数です。
string md5_file ( string $filename [, bool $raw_output = false ] )
$ filename :必須、ファイルパス。
$ raw_output :オプション、元のバイナリ形式で出力するかどうか。デフォルトのfalseは、32ビットの16進数文字列を返します。
この関数は、ファイルコンテンツのMD5値を返し、失敗した場合にfalseを返します。
ファイルのMD5値を計算する最も簡単な例を次に示します。
<?php
$file = 'example.txt';
$md5 = md5_file($file);
if ($md5 !== false) {
echo "書類 $file のMD5値はです:$md5";
} else {
echo "无法读取書類 $file";
}
?>
この例では、ファイルパスのexample.txtを渡し、ファイルのMD5値を印刷します。ファイルが存在しない、または読み取れない場合、エラーメッセージが返されます。
ファイルをアップロードするとき、クライアントは最初にファイルのMD5値を計算でき、アップロード後、サーバーはMD5を計算して、2つが一貫していることを確認し、ファイル転送中にエラーまたは改ざんを回避します。
<?php
// 假设客户端上传了書類,服务器端接收到書類路径$uploadedFile
$serverMd5 = md5_file($uploadedFile);
$clientMd5 = $_POST['file_md5']; // クライアントが提出したと仮定しますmd5価値
if ($serverMd5 === $clientMd5) {
echo "書類验证成功,完了して正しい。";
} else {
echo "書類验证失败,書類可能被篡改。";
}
?>
キャッシュシステムでは、ファイルのMD5値を使用して、ファイルが変更されているかどうか、キャッシュを更新するかどうかを判断できます。
<?php
$cacheFile = '/path/to/cache/data.cache';
$currentMd5 = md5_file($cacheFile);
if ($currentMd5 !== $storedMd5) {
// 書類内容发生变化,キャッシュを再生します
regenerateCache();
$storedMd5 = $currentMd5;
}
?>
ファイルハッシュはMD5_FILE()によって計算され、ダウンロードリンクを使用して、違法なダウンロードやリンクが改ざんを防ぐことができます。
<?php
$file = 'files/sample.zip';
$expectedMd5 = md5_file($file);
echo "点击下载書類:<a href='https://m66.net/download.php?file=sample.zip&md5=$expectedMd5'>ダウンロードリンク</a>";
?>
md5_file()は、計算のためにファイルコンテンツ全体を読み取ります。これは、大きなファイルのパフォーマンスに影響を与えます。合理的に使用することをお勧めします。
MD5アルゴリズムには、衝突リスクがあることが証明されています。セキュリティに敏感なシナリオで、より安全なハッシュアルゴリズム( hash_file( 'sha256'、$ filenameなど)を使用することをお勧めします。
着信ファイルパスは読み取り可能でなければなりません。そうしないと、 Falseが返されます。
この記事を通して、 MD5_File()関数の基本的な使用方法といくつかの典型的なアプリケーションシナリオを習得しました。実際の開発では、ファイル検証要件と組み合わせて、 MD5_FILE()は非常に便利なツールです。