[PHP] zipアーカイブ内のファイルを読み出す

公開
更新日

スポンサーリンク

zip形式の圧縮ファイルを、PHPを使い解凍せずにそのままの状態で中にあるファイルを読み出す方法の解説です。

サーバー上にあるarchive.zipの中に、2012-07-01.txt、2012-07-02.txt、2012-07-03.txt…という具合にテキストファイルが圧縮されているとします。この中から目的のファイルを探し出し、その中身を出力するということを行います。ここでは2012-07-03.txtを探して表示することにします。

//ファイルパス
$path = "archive.zip";

//zipファイルをオープン
$zip = zip_open($path);

//「2012-07-03.txt」を探す
while( $entry = zip_read($zip) ) {
  if( zip_entry_name($entry) === "2012-07-03.txt" ){
    break;//見つかったらループを抜ける
  }
}

//zip内のファイルをオープン
zip_entry_open($zip, $entry, "r");

//オープンしたファイルを読み込む
$entry_content = zip_entry_read($entry, zip_entry_filesize($entry));

echo $entry_content;

zip_entry_close($entry);
zip_close($zip);

5行目で指定したパスのzipアーカイブをzip_open()でオープンしています。zip_open()で得たリソースを8行目のzip_read()で読み出し、zip_entry_name()でzipファイル内のファイル名を得ています。目的のファイル名のものが見つかったら、breakでwhile文を抜けます。

この時点でリソース$entryには2012-07-03.txtが入っていますので、zip_entry_open($zip, $entry, "r")でオープンし、zip_entry_read()で中身を読み出しプリントしています。

以上でZIP内のファイルを出力することができました。

最後にzip_entry_close()zip_close()を忘れないようにしましょう。

スポンサーリンク


Comment