【PHP8.x】md5_file関数の使い方

作成日: 更新日:

md5_file関数は、指定されたファイルのMD5ハッシュ値を計算して取得する関数です。MD5ハッシュとは、ファイルのデータ内容から一意の短い文字列(フィンガープリントのようなもの)を生成するアルゴリズムであり、ファイルの同一性を確認したり、内容が改ざんされていないかを検出したりする目的で広く利用されています。この関数は、引数として検証したいファイルのパスを受け取ります。例えば、インターネットからダウンロードしたファイルが正しく転送されたか、または元のファイルと全く同じ内容であるかを確認したい場合などに非常に便利です。

関数が正常に実行されると、32文字の16進数文字列としてMD5ハッシュ値が返されます。この文字列は、ファイルのバイト列を元に計算された固有の値です。ファイルの内容が少しでも変更されると、計算されるMD5ハッシュ値も全く異なるものになります。そのため、異なる場所にある二つのファイルのMD5ハッシュ値が一致すれば、それらのファイルは同じ内容であると判断できます。ファイルが存在しない場合や読み取り権限がない場合など、何らかのエラーが発生した際にはブール値のfalseが返されます。システム開発において、ファイルの内容検証や整合性チェックの機能が必要な場面で活用される、基本的ながらも重要な関数の一つです。

基本的な使い方

構文(syntax)

<?php
$file_path = 'path/to/your_document.txt';
$md5_hash = md5_file($file_path);
?>

引数(parameters)

string $filename, bool $binary = false

  • string $filename: ハッシュを計算する対象のファイルパスを指定します。
  • bool $binary = false: trueを指定すると、ハッシュ値をバイナリ形式で返します。デフォルトはfalseで、16進数形式で返します。

戻り値(return)

string|false

指定されたファイルのMD5ハッシュ値を文字列で返します。ファイルの読み込みに失敗した場合はfalseを返します。

サンプルコード

PHPでファイルのMD5ハッシュを計算する

<?php

declare(strict_types=1);

/**
 * ファイルのMD5ハッシュ値を計算して表示するサンプルコード
 *
 * このスクリプトは、一時的なテキストファイルを作成し、
 * そのファイルのMD5ハッシュ値を計算・表示してから、
 * ファイルを削除するまでの一連の流れを示します。
 */

// ハッシュ値を計算する対象のファイル名
$filename = 'sample_for_md5.txt';

// ファイルに書き込む内容
$content = 'This is a sample file to calculate the MD5 hash.';

// 1. サンプルファイルを作成
// file_put_contentsは、ファイルへのデータ書き込みを簡単に行うための関数です。
if (file_put_contents($filename, $content) === false) {
    echo "Error: Failed to create the sample file '{$filename}'." . PHP_EOL;
    exit(1); // ファイル作成に失敗した場合は処理を中断
}
echo "File created: '{$filename}'" . PHP_EOL;


// 2. ファイルのMD5ハッシュ値を計算
// md5_file() は、指定されたファイルのMD5ハッシュを計算します。
// ファイルが存在しない、または読み込めない場合は false を返します。
$hash = md5_file($filename);


// 3. 結果を出力
if ($hash !== false) {
    // 成功した場合、計算された32文字の16進数ハッシュ値を出力します。
    echo "MD5 hash of the file: {$hash}" . PHP_EOL;
} else {
    // 失敗した場合、エラーメッセージを出力します。
    echo "Error: Failed to calculate the MD5 hash of '{$filename}'." . PHP_EOL;
}


// 4. 後片付けとして作成したファイルを削除
// unlink() は、ファイルを削除する関数です。
if (unlink($filename)) {
    echo "File deleted: '{$filename}'" . PHP_EOL;
} else {
    echo "Error: Failed to delete the sample file '{$filename}'." . PHP_EOL;
}

?>

PHPのmd5_file関数は、指定されたファイルのMD5ハッシュ値を計算するために利用されます。MD5ハッシュ値は、ファイルの内容に基づいて生成される一意の32文字の16進数文字列で、ファイルの同一性を確認する際などに役立ちます。

このサンプルコードでは、まず一時的なテキストファイルを作成し、そのファイルに対してmd5_file関数を使ってハッシュ値を計算しています。md5_file関数の最初の引数$filenameには、ハッシュ値を計算したいファイルのパスを文字列で渡します。例えば、md5_file('sample_for_md5.txt')のように指定します。2番目の引数$binaryはオプションで、デフォルトではfalseが設定されており、ハッシュ値を人間が読みやすい16進数文字列として返します。もしtrueに設定すると、MD5ハッシュの生バイナリ形式を返します。

関数は、ファイルの読み込みとハッシュ値の計算に成功した場合、計算されたMD5ハッシュ値を文字列として返します。しかし、指定されたファイルが存在しない、または読み込み権限がないなどの理由で処理が失敗した場合は、戻り値としてブール値のfalseを返します。サンプルコードでは、この戻り値を確認し、ハッシュ値が正常に取得できた場合はその値を表示し、失敗した場合はエラーメッセージを出力することで、安全な処理フローを示しています。最後に、作成した一時ファイルを削除する後片付けの処理も含まれています。

md5_file関数は、指定したファイルが存在しない、または読み取り権限がない場合にfalseを返します。そのため、サンプルコードのように戻り値を !== false で厳密に比較し、処理が成功したかを確認することが重要です。また、MD5はファイルの同一性を確認する目的で利用されますが、暗号学的な脆弱性があるため、パスワードのハッシュ化などセキュリティが重要な用途には絶対に使用しないでください。その場合は、より安全なpassword_hash()関数などを使用する必要があります。ファイルを作成・削除する際は、対象のパスやパーミッション(権限)が正しいかを確認することも、エラーを防ぐ上で大切です。

【PHP8.x】md5_file関数の使い方 | いっしー@Webエンジニア