関数の概要
PHPの sha1_file 関数は、指定したファイルの内容に対してSHA-1ハッシュ値を計算し、そのハッシュ文字列を返します。ファイルの整合性チェックや、ファイルが改変されていないか確認する際によく使われます。ファイルの中身から直接ハッシュを生成するため、文字列でSHA-1を求める sha1 関数と併せて使われることが多いです。
パラメータの説明
filename(必須): ハッシュを取得したいファイルのパス(文字列)を指定します。raw_output(オプション): ブール値。trueを渡すと、SHA-1ハッシュ値を生のバイナリ形式で返します。デフォルトはfalseで、40文字の16進数表現の文字列を返します。
戻り値
指定したファイルのSHA-1ハッシュ値を文字列で返します。ファイルが存在しない場合や読み込みに失敗した場合は false を返します。
使用例
基本的な使い方
<?php
$file = 'example.txt';
$hash = sha1_file($file);
if ($hash !== false) {
echo "SHA-1ハッシュ値: " . $hash;
} else {
echo "ファイルが読み込めませんでした。";
}
?>
こちらはファイル example.txt のSHA-1ハッシュを求め、画面に出力するコードです。ファイルが存在しない場合はエラーメッセージを表示します。
バイナリデータとしてハッシュを取得する
<?php
$file = 'image.png';
$rawHash = sha1_file($file, true);
if ($rawHash !== false) {
// バイナリデータの長さを表示
echo "バイナリ形式のSHA-1ハッシュ長さ: " . strlen($rawHash);
} else {
echo "ファイルが読み込めませんでした。";
}
?>
true を第二引数に渡すと、ハッシュ値を生のバイナリ形式で取得します。バイナリデータとして処理したい場合に便利です。
ファイルの改変チェックに利用する
<?php
$filename = 'data.json';
$originalHash = 'd033e22ae348aeb5660fc2140aec35850c4da997'; // 事前に保存しておいた正しいハッシュ
$currentHash = sha1_file($filename);
if ($currentHash === $originalHash) {
echo "ファイルは改変されていません。";
} else {
echo "ファイルが改変されています。";
}
?>
事前に記録しておいたSHA-1ハッシュと実際のファイルのハッシュを比較して、ファイルの改変有無をチェックできます。
関連する関数
sha1: 文字列のSHA-1ハッシュを計算する関数。md5_file: ファイルのMD5ハッシュ値を取得する関数。hash_file: 指定したハッシュアルゴリズムでファイルのハッシュを計算する汎用関数。
まとめ
sha1_file はファイルの内容からSHA-1ハッシュを簡単に取得できる便利な関数で、ファイルの整合性や改変検出に活用できます。ファイルパスを正しく指定することや、読み込みエラー時のチェックを行うことが重要です。用途に応じてバイナリ形式で取得することも可能で、sha1 や hash_file などの他のハッシュ関連関数と組み合わせて使うことで、より柔軟なファイル検証ができます。
