ホームページ >バックエンド開発 >PHPチュートリアル >PHPでファイルをジップおよび解凍する方法

PHPでファイルをジップおよび解凍する方法

Joseph Gordon-Levitt
Joseph Gordon-Levittオリジナル
2025-03-04 10:39:10626ブラウズ

How to Zip and Unzip Files in PHP

ネットワーク転送ファイル圧縮には、圧縮後の合計ファイルサイズが大幅に減少し、帯域幅を節約し、スピードを上げます。ユーザーは、ダウンロード後いつでも減圧できます。要するに、圧縮は、あなたとあなたの訪問者のためのファイルのネットワーク転送を大幅に簡素化することができます。

ファイルを手動で圧縮するのは面倒ですが、幸いなことに、PHPはファイルの圧縮と減圧の処理に特化した多くの拡張機能を提供します。これらの拡張機能の関数を使用して、PHPファイルを自動的に圧縮できます。

このチュートリアルでは、ファイルをPHPのzipアーカイブに圧縮し、zipアーカイブからファイルを解凍する方法をガイドします。また、最初に解凍せずに、アーカイブでファイルを削除または名前変更する方法も学びます。

    PHPシングルファイル圧縮
  • ディレクトリでの複数のファイル圧縮
  • アーカイブの変更または上書き
  • その他のアーカイブコントロール
  • Php> php PHPの
Ziparchive :: rdonly

> PHPのロゴ(PHP 7.4.3以降で利用可能)を使用すると、読み取り専用モードでアーカイブを開くことができます。

このメソッドのドキュメントを参照して、ファイルを開くと返されるさまざまなエラーコードを理解することができます。 zipファイルが正常に開かれたり作成されている場合、メソッドはziparchive :: uppriteフラグを返します。その特定の名前のアーカイブが存在しない場合、新しいアーカイブは作成されません。 Ziparchive ::組み合わせて作成して、既存のアーカイブを上書きし、その特定の名前のアーカイブがない場合は新しいアーカイブを作成できます。例は次のとおりです。

ziparchive :: create and open()メソッドを使用して、読み取りと書き込みのために新しいまたは既存のアーカイブを開きます。

このセクションでは、Ziparchive :: createに渡されたフラグの異なる組み合わせにより、既存のアーカイブが既に存在する場合は既存のアーカイブを作成するか変更することで生じる可能性のある違いを理解します。既存のアーカイブの変更に関する警告はありません。つまり、このセクションでコードを実行してアーカイブを作成し、元のオプションを新しいオプションに置き換えた後に再度実行すると、予期しない結果が得られます。
$zip->open('my_compressed_files.zip', ZipArchive::OVERWRITE|ZipArchive::CREATE);

アーカイブには、サブディレクトリ

ファイル/画像

を含む

> wallpapers

ディレクトリと wallpapersディレクトリからの画像が含まれます。最初は少し混乱する可能性があり、なぜアーカイブ内のすべてを上書きしたいのか(すでに存在する場合)、コードが存在しない場合にエラーをスローしたくない場合は、Ziparchive :: create | ziparchive :: overwriteを使用します。 libzip 1.6.0であるため、空のファイルは有効なアーカイブと見なされなくなったことを覚えておいてください。 Archiveからコンテンツを抽出しますパラメーターを使用して、抽出する単一のファイル名を指定するか、ファイル配列を渡すことができます。

覚えておくべきことの1つは、アーカイブ内のファイルへの正しいパスを指定して抽出する必要があることです。たとえば、前のセクションで、alegreyasans-light.ttfという名前のフォントファイルをアーカイブしました。このファイルは、アーカイブにfont_filesという名前のディレクトリに保存されています。これは、$entriesパラメーターで指定する必要があるパスは、font_files/alegreyasans-light.ttfであることを意味します。 ディレクトリとファイル構造は抽出プロセス中に保持され、ファイルはそれぞれのディレクトリに抽出されます。

2番目のパラメーターが省略されている場合、メソッドはアーカイブ内のすべてのファイルを抽出します。
$zip->open('my_compressed_files.zip', ZipArchive::OVERWRITE|ZipArchive::CREATE);

その他のアーカイブコントロール

また、

クラスは、すべてを抽出する前にアーカイブに関する詳細情報を入手するのに役立つ他の多くの方法とプロパティを提供します。

ZipArchive

メソッドを使用して、アーカイブ内のファイルの数を計算できます。もう1つのオプションは、

属性を使用することです。アーカイブ内のすべてのファイルを反復したり、必要なファイルのみを抽出したり、アーカイブから削除するなど、他のアクションを実行できます。 count() numFiles次の例では、単語

italic

を含むアーカイブ内のすべてのファイルを削除しています。同様のコードを使用して、特定の単語が含まれていないすべてのファイルを削除できます。これらのファイルを反復し、特定の単語を他のコンテンツに置き換えることもできます。 上記のコードでは、1つのファイルを削除するために

を使用します。ただし、それを使用してディレクトリ全体を削除することもできます。
<?php

$zip = new ZipArchive();
$zip->open('compressed/user_archive.zip', ZipArchive::CREATE);
$zip->extractTo('uncompressed/', 'font_files/AlegreyaSans-Light.ttf');
$zip->close();

?>

同様の関数deleteName()を使用して、アーカイブ内のファイルの名前を変更できます。

という名前のファイルが既に存在する場合、エラーメッセージが表示されます。

renameName($oldname, $newname)要約$newname

PHPのファイルの自動圧縮と減圧を簡単にする

クラスの非常に有用な多くの方法を導入しました。これで、独自の標準に基づいて、単一のファイルまたはファイルのグループを一度に圧縮できるようになりました。繰り返しますが、他のコンテンツに影響を与えることなく、アーカイブから特定のファイルを抽出できるはずです。

ZipArchive

の助けを借りて、個々のファイルをより適切に制御でき、それらを変更または削除するのは非常に簡単です。このような機能についてさらに学ぶには、少なくとも一度はドキュメントを読む必要があります。 count()

以上がPHPでファイルをジップおよび解凍する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。