関数の概要
gzeof は、PHPでgzip圧縮されたファイルの終端(EOF: End Of File)に達したかどうかを判定するための関数です。この関数を使うことで、圧縮ファイルの読み込み中にどこまで読み終えたかを確認でき、ループ処理等で正確にファイルの終わりを検知できます。
パラメータの説明
$zp—gzopen関数などで開かれたgzipファイルハンドル。resource型として渡します。
戻り値
gzeofは、ファイルの終端に達していれば true を返し、まだ終端に達していなければ false を返します。
使用例
基本的な使い方
<?php
$filename = "example.gz";
$gz = gzopen($filename, "r");
if (!$gz) {
die("ファイルを開けませんでした。");
}
while (!gzeof($gz)) {
$line = gzgets($gz);
echo $line . "<br>";
}
gzclose($gz);
?>
この例では、gzipファイルを開き、gzeofで終端をチェックしながら1行ずつ読み込んでいます。ファイルの終わりまで読み込みを続けて、内容をブラウザに表示します。
バイナリデータの読み込みで使用
<?php
$gz = gzopen("data.gz", "rb");
if (!$gz) {
exit("ファイルオープン失敗");
}
while (!gzeof($gz)) {
$buffer = gzread($gz, 1024);
// 読み込んだバイナリデータを処理
echo bin2hex($buffer) . "<br>";
}
gzclose($gz);
?>
圧縮されたバイナリデータを1024バイトずつ読み込み、16進数文字列に変換して表示しています。gzeofで終端判定をしながら読み込みを進めるのがポイントです。
gzファイルの内容全体を読み込む例
<?php
$gz = gzopen("sample.gz", "r");
if (!$gz) {
die("ファイルを開けません");
}
$content = "";
while (!gzeof($gz)) {
$content .= gzread($gz, 4096);
}
gzclose($gz);
echo nl2br(htmlspecialchars($content));
?>
gzip圧縮ファイルを一気にすべて読み込み、HTMLエスケープして表示しています。gzeofによって正確な終端検知が可能で、安全にファイル全体の読み込みができます。
関連する関数
gzopen— gzipファイルを開くgzread— gzipファイルからバイト数指定で読み込むgzgets— gzipファイルから1行ずつ読み込むgzclose— gzipファイルを閉じるfeof— 通常のファイル終端を判定する関数
まとめ
gzeofはPHPでgzip圧縮ファイルの読み込み時に終端を正確に検知するための重要な関数です。特に圧縮テキストやバイナリデータをループで読み込む際には必須の関数です。gzopenなどのgzip専用I/O関数と組み合わせて使い、ファイルの内容を安全かつ確実に扱いましょう。
