gzpassthru

関数の概要

gzpassthruは、gzip圧縮されたファイルやストリームの現在の位置から最後までの内容を読み込み、そのまま標準出力(ブラウザなど)に書き出すPHP関数です。主に圧縮されたファイルの残りデータを一気に出力したい場合に便利です。

パラメータの説明

  • resource $zp : gzipファイルを指すストリームリソース。gzopenなどで取得した読み込みモードのリソースを渡します。

戻り値

標準出力に書き出されたバイト数を整数で返します。エラー発生時は FALSE を返します。

使用例

基本的な使い方

<?php
$gz = gzopen('example.gz', 'rb');
if ($gz) {
    // ファイルの先頭から最後まで出力
    gzpassthru($gz);
    gzclose($gz);
}
?>

gzip形式のファイルを開き、ファイルポインタの現在位置からファイル終端までのデータをそのまま標準出力に送ります。ブラウザで直接圧縮ファイルの内容を確認したいときにも使えます。

ファイルの途中から残りを出力する

<?php
$gz = gzopen('example.gz', 'rb');
if ($gz) {
    // 10バイト読み飛ばす
    gzseek($gz, 10);
    // 10バイト目以降を全て出力
    gzpassthru($gz);
    gzclose($gz);
}
?>

ファイルの先頭から10バイト分読み飛ばし、その後の全データを標準出力に書き出します。途中から圧縮データを読みたい場合に有効です。

HTTPレスポンスに直接圧縮データを出力

<?php
header('Content-Type: application/gzip');
$gz = gzopen('backup.gz', 'rb');
if ($gz) {
    gzpassthru($gz);
    gzclose($gz);
}
?>

Webサーバーからgzipファイルをそのままダウンロードさせたい時に、HTTPヘッダーを適切に設定し、gzpassthruで圧縮ファイル全体を直接送信しています。

関連する関数

  • gzopen – gzipファイルを開く
  • gzread – gzipファイルから指定バイト数だけ読み込む
  • gzseek – gzipファイルの読み込み位置を移動する
  • gzclose – gzipファイルを閉じる
  • gzgetss – gzipファイルからタグなしの文字列を読み込む

まとめ

gzpassthruはgzip圧縮ファイルの残りのデータをまとめて標準出力に送るのに便利な関数です。ファイルの途中から読みたい場合やWeb経由で圧縮データを送信したい場合に役立ちます。gzopengzseekなどと組み合わせて使うことで柔軟な圧縮ファイル処理が可能です。初心者でも簡単に扱えるため、圧縮ファイルを直接ブラウザに出力したいケースなどでぜひ活用してください。