PHPでzipアーカイブ内の単一ファイルを読み取る方法
PHPでは、zip:// ストリームラッパーを使うことで、zipアーカイブを解凍することなく、その中に含まれる特定の1つのファイルへ直接アクセスできます。ここでは、fopen関数と組み合わせてzip内の単一ファイルを読み込む方法を解説します。
基本的なコード例
以下のコードは、zipアーカイブ「test.zip」の中にある「test.txt」を読み取り、その内容を出力する例です。
$handle = fopen('zip://test.zip#test.txt', 'r');
$result = '';
while (!feof($handle)) {
$result .= fread($handle, 8192);
}
fclose($handle);
echo $result;
コードのポイント
zip:// ラッパーの書式
zip:// ストリームラッパーは、次のような形式で指定します。
zip://[zipファイルのパス]#[アーカイブ内のファイル名]
「#」以降に読み込みたいファイル名を指定するのが特徴です。この構文により、アーカイブ全体を展開せずに目的のファイルだけをストリームとして開けます。
freadによる分割読み込み
whileループ内でfeof()によりファイル末尾に達したかを判定しながら、fread()で一度に8192バイトずつ読み込んでいます。大きなファイルでもメモリを圧迫しにくい、安全な読み込み方法です。
fcloseでのリソース解放
読み込みが完了したらfclose()を呼び出してファイルハンドルを閉じます。リソースリークを防ぐため、必ず実行しましょう。
実行結果
上記のコードを実行すると、「test.txt」の中身(テキスト内容)がそのまま出力されます。
補足:file_get_contentsとの使い分け
小さなファイルなら、より簡潔に書けるfile_get_contents()も利用できます。
$result = file_get_contents('zip://test.zip#test.txt');
echo $result;
ただし、大きなファイルを扱う場合や読み込み処理を細かく制御したい場合は、fopen + fread を使った方法が適しています。用途に応じて使い分けるとよいでしょう。
-
Rubyでファイルを読み書きする方法を実例つきで徹底解説
Rubyでファイルの読み書きができるようになると、ファイルからデータを抽出したり、新しいファイルを作成したり、必要な情報を素早く見つけたりできるようになります。この記事では、Rubyにおけるファイル操作の基本を、実際のコード例とともにわかりやすく解説します。 この記事で学べること Rubyでファイルを読み込む方法 Rubyでファイルに書き込む方法 覚えておきたいFileクラスのメソッド ディレクトリ操作の基礎 FileUtilsモジュールの使い方 まとめ それでは始めましょう! Rubyでファイルを読み込む方法 Rubyでファイルを読み込む基本的な流れは、次の3ステップです。 op
-
MacでファイルをZIP圧縮する方法を徹底解説|Windowsの手順もあわせて紹介
Macでファイルの圧縮(ZIP化)のやり方をお探しですか?この記事では、macOSの標準機能を使ってファイルやデータをZIP形式に圧縮する手順を、ステップバイステップでわかりやすく解説します。 ファイル圧縮は、デジタルワークスペースを整理整頓するための最も便利な方法の一つです。ZIP形式を活用すれば、複数のファイルや大量のデータをより速いスピードで簡単に送信できます。ZIPは可逆圧縮(ロスレス圧縮)に対応した実用的なアーカイブ形式で、複数のファイルを1つのフォルダ/ファイルにまとめて送れるのが大きな特徴です。ストレージ容量を節約できるうえ、データ共有も高速化します。また、圧縮済みファイルは移