PHPでのzip圧縮ファイルの処理は一般的なタスクです。特に、アップロードファイルまたは自動アーカイブを処理する場合に役立ちます。 PHPのZIP拡張機能は、ZIPファイルを操作するためのAPIの完全なセットを提供します。ZIP_READ ()は、ZIPファイルのエントリを通過するために使用される重要な関数です。この記事では、 zip_read()関数を使用して、zipファイルの各ファイルコンテンツを1つずつ読み取り、抽出する方法を示します。
開始する前に、PHP環境にzip拡張機能が有効になっていることを確認してください。それが有効になっているかどうかを確認できます。
<?php
phpinfo();
?>
ページでzipを検索します。存在する場合は、有効になります。そうでない場合は、オペレーティングシステムに従って拡張機能をインストールして有効にします。
zip_read()を使用する基本的な手順は次のとおりです。
zip_open()を使用してzipファイルを開きます。
zip_read()を使用して、各エントリをトラバースします。
zip_entry_name()を使用して、エントリ名を取得します。
zip_entry_open()とzip_entry_read()を使用して、エントリコンテンツを読み取ります。
オプション:読み取りコンテンツをファイルに書き込み、抽出操作を実行します。
ZIPファイルの各ファイルを指定されたディレクトリに1つずつ読み取り、抽出する完全な例を次に示します。
<?php
$zipFile = 'archive.zip'; // ファイルが現在のディレクトリにあると仮定します
$extractTo = 'extracted_files/';
// ターゲットディレクトリが存在することを確認してください
if (!is_dir($extractTo)) {
mkdir($extractTo, 0755, true);
}
// 開ける ZIP 書類
$zip = zip_open($zipFile);
if (is_resource($zip)) {
while ($zipEntry = zip_read($zip)) {
$entryName = zip_entry_name($zipEntry);
$entryPath = $extractTo . $entryName;
// ディレクトリエントリを無視します,仅处理書類
if (substr($entryName, -1) === '/') {
continue;
}
// 尝试開ける条目
if (zip_entry_open($zip, $zipEntry, "r")) {
$entryContent = zip_entry_read($zipEntry, zip_entry_filesize($zipEntry));
// ディレクトリ構造が存在することを確認してください
$dir = dirname($entryPath);
if (!is_dir($dir)) {
mkdir($dir, 0755, true);
}
// 写入到書類
file_put_contents($entryPath, $entryContent);
// オプション:输出当前处理的書類
echo "已提取書類: $entryName<br>";
zip_entry_close($zipEntry);
}
}
zip_close($zip);
echo "ZIP 書類处理完成。";
} else {
echo "无法開ける ZIP 書類。";
}
?>
zip_read()は、一度に1つのエントリを読み取ります。すべてのエントリを読み取るには、ループで複数回呼び出す必要があります。
zip_entry_filesize()を使用して、ファイルサイズを取得して完全なコンテンツを読み取ります。
zip_entry_open()を使用して、エントリの内容を読み取る必要があります。
ZIPファイルにディレクトリの複数のレイヤーがある場合は、抽出前にディレクトリ構造が存在することを確認してください。
オンラインドキュメント減圧処理:圧縮パッケージをアップロードした後、サーバー固有のディレクトリに自動的に減圧されます。
バッチ画像処理:ユーザーがアップロードしたzipファイルの写真を解凍し、後続の処理のために/ uploads /ディレクトリに保存します。
コンテンツバックアップと復元:システムは、データバックアップを自動的にパッケージ化し、ファイルごとの抽出と回復をサポートします。