関数の概要
PHPの gzrewind 関数は、圧縮されたgzファイルの読み取りポインタをファイルの先頭に戻すための関数です。gzファイルを扱う際、一度ファイルの途中まで読み込んだ後に再度先頭から読み直したい場合に使います。通常のファイル操作の rewind と似ていますが、圧縮ファイル用に最適化されています。
パラメータの説明
resource $zp:gzopenなどでオープンしたgzファイルのリソースハンドルを指定します。
戻り値
成功した場合は true を返し、失敗した場合は false を返します。失敗する可能性としては、無効なリソースが渡された場合などがあります。
使用例
基本的な使い方
<?php
// gzファイルを読み込みモードで開く
$gz = gzopen('example.gz', 'r');
if ($gz) {
// 一部読み込み
$data = gzread($gz, 20);
echo "最初の20バイト: " . $data . "n";
// ファイルポインタを先頭に戻す
gzrewind($gz);
// 先頭から再度読み込み
$data_again = gzread($gz, 20);
echo "再び最初の20バイト: " . $data_again . "n";
gzclose($gz);
} else {
echo "ファイルオープンに失敗しました。";
}
?>
この例では、gzopenでファイルを開き、gzreadで一度読み込んだ後、gzrewindでポインタを先頭に戻しています。その後、もう一度最初の部分を読み直しています。
行単位で読み込みながらポインタをリセット
<?php
$gz = gzopen('log.gz', 'r');
if ($gz) {
while (($line = gzgets($gz)) !== false) {
echo "読み込んだ行: " . $line;
// 3行目を読み終えたら戻す
if (strpos($line, '3行目の目印') !== false) {
gzrewind($gz);
echo "ファイル先頭に戻りました。n";
break;
}
}
gzclose($gz);
} else {
echo "ファイルオープンに失敗しました。";
}
?>
この例では、圧縮ファイルの中身を行単位で読み込み、特定の行を検出したらポインタを先頭に戻して処理をやり直す例です。条件により繰り返し処理が必要な場合に役立ちます。
複数回の読み込み処理での利用例
<?php
$gz = gzopen('data.gz', 'r');
if ($gz) {
// 1回目の読み込み(100バイト)
$first_read = gzread($gz, 100);
echo "1回目読み込み: " . $first_read . "n";
// ファイルポインタを戻す
gzrewind($gz);
// 2回目の読み込み(50バイト)
$second_read = gzread($gz, 50);
echo "2回目読み込み: " . $second_read . "n";
// 再度ポインタを戻す
gzrewind($gz);
// 3回目の読み込み全体読み込み
$contents = '';
while (!gzeof($gz)) {
$contents .= gzgets($gz);
}
echo "3回目で全体読み込み:n" . $contents;
gzclose($gz);
} else {
echo "ファイルオープンに失敗しました。";
}
?>
このように gzrewind を使えば、1つの圧縮ファイルを複数回読んだり、途中まで読んで処理を切り替えたりできます。実務でも重宝するテクニックです。
関連する関数
gzopen– gzファイルを開くgzread– gzファイルの読み込みgzgets– 1行ずつ読み込むgzclose– gzファイルを閉じるgzeof– ファイル終端判定rewind– 通常ファイルのポインタを戻す
まとめ
gzrewind は、圧縮されたgzファイル内の読み取り位置を先頭に戻すために使う便利な関数です。圧縮ファイルの内容を何度も読み返す必要がある場合や、途中で読み込み方を切り替えたい場合に非常に役立ちます。gzopen でファイルを開いた後、読み込み操作と組み合わせて適切に利用しましょう。初心者でも簡単に使えるため、圧縮ファイル操作時の基本的なテクニックとして覚えておくことをおすすめします。
