購入した仮想ホストが zip_open() をサポートしていない場合、
新しい ZipArchive() もサポートされていません。
それから、exec()、dl()...
がサポートされるとは考えないでください。
ただし、gzopen() は常にそれをサポートします。
PHP の圧縮および解凍クラス pclzip は、サーバーが gzopen をサポートしている限り、圧縮および解凍を実現できます。
PclZip の概要
PclZip ライブラリは、Zip 形式の圧縮ファイル (WinZip、PKZIP) を圧縮および解凍でき、圧縮ファイルの生成、圧縮ファイルの内容の一覧表示、ファイルの解凍などの処理を行うことができます。サーバー側で圧縮・解凍ができるので非常に便利です。
PclZip は PclZip カテゴリを定義し、そのカテゴリ オブジェクトは ZIP ファイルと見なすことができ、処理のためのメソッドも提供します。
PclZip の使用方法
1.基本
すべての機能は、pclzip.lib.php ファイルによって提供されます。PclZip ライブラリは、ホームページ (www.phpconcept.net/pclzip/index.en.php) からダウンロードできます。すべての PKZIP ファイルは、実際には PclZip クラスのオブジェクトです。 PclZip ファイル (つまり、PclZip クラス オブジェクト) が生成されると、最初に圧縮ファイルが生成され、ファイル名が指定されていますが、この圧縮ファイルのコンテンツはまだ存在しません:
< ?PHP require_once('pclzip.lib.php'); $archive = new PclZip("archive.zip"); ?>
このオブジェクトは、このファイルの処理に使用できるパブリック メソッドをいくつか提供します。
2. パラメータ
各メソッドには、必須パラメータとオプションのパラメータを含む、独自の使用可能なパラメータがあります:
< ?PHP require_once('pclzip.lib.php'); $archive = new PclZip('archive.zip'); $v_list = $archive->add('dev/file.txt', PCLZIP_OPT_REMOVE_PATH, 'dev'); ?>
上記の例では、「dev/file.txt」は必須パラメータですが、「PCLZIP_OPT_REMOVE_PATH」は必須ではありません。もちろん、一部のメソッドには必須ではないパラメータのみを含めることもできます:
< ?PHP $list = $archive->extract(PCLZIP_OPT_PATH, "folder", PCLZIP_OPT_REMOVE_PATH, "data", PCLZIP_CB_PRE_EXTRACT, "callback_pre_extract",); ?>
上記の例では、圧縮ファイルの元のファイル保存パスは/dataですが、/folderに展開するように指定することもできます。さらに、解凍前にコールバック関数 (「callback_pre_extract()」) が呼び出されます。この関数を使用すると、ユーザーは解凍プロセス中にファイルの保存パスとファイル名を変更したり、解凍しない特定のファイルを選択したりできます。
使用可能なオプションのパラメータはすべて、URL (www.phpconcept.net/pclzip/man/en/index.php) にあります。
3. 戻り値
各メソッドによって返される値は異なる場合があるため、各メソッドで説明します。ただし、ほとんどのメソッドは 0、エラー、または配列を返します。
4. エラー処理
バージョン 1.3 以降、エラー処理は PclZip カテゴリに統合されています。メソッドがエラー コードを返すと、エラー処理を容易にするための追加情報を取得できます。
* errorName(): エラー名を返します
* errorCode(): エラーコード
を返します
* errorInfo(): エラーの説明を返します
PclZip 例 1. ZIP 圧縮ファイルの生成
PclZip($zipname): PclZip コンストラクター、$zipname は PKZIP 圧縮ファイルのファイル名です。
主な目的は PclZip オブジェクト、つまり PKZIP 圧縮ファイルを生成することですが、この時点では圧縮ファイルのみが生成され、いくつかのチェック (zlib 拡張子がオンになっているかどうかなど) が実行されます。ただし、それ以外のアクションは実行されません。
create($filelist, [オプションの引数リスト]): パラメータ $filelist で指定されたファイルまたはディレクトリ (すべてのファイルとサブディレクトリを含む) を、上記で生成された圧縮ファイルに追加します。
必須ではないパラメータにより、圧縮ファイル内のファイル ストレージ パスが変更される可能性があります。
このメソッドで使用できるパラメータは、ブログ (www.phpconcept.net/pclzip/man/en/index.php) で見つけることができます。
< ?PHP include_once('pclzip.lib.php'); $archive = new PclZip('archive.zip'); $v_list = $archive->create('file.txt,data/text.txt,folder'); if ($v_list == 0) { die("Error : ".$archive->errorInfo(true)); } ?>
次の例は、基本的に上記の例と同じ方法で archive.zip が生成されることを示していますが、その中の file.txt と text.txt を圧縮するときにパスが data/ から install/ に変更されるため、これら 2 つのファイルはarchive.zip ファイルのパスは、install/file.txt および install/text.txt
になります。
< ?PHP include_once('pclzip.lib.php'); $archive = new PclZip('archive.zip'); $v_list = $archive->create('data/file.txt,data/text.txt', PCLZIP_OPT_REMOVE_PATH, 'data', PCLZIP_OPT_ADD_PATH, 'install'); if ($v_list == 0) { die("Error : ".$archive->errorInfo(true)); } ?>
PclZip 例 2. 圧縮ファイルの内容を一覧表示する
listContent(): ファイル属性やディレクトリを含む圧縮ファイルの内容をリストします:
< ?PHP include_once('pclzip.lib.php'); $zip = new PclZip("test.zip"); if (($list = $zip->listContent()) == 0) { die("Error : ".$zip->errorInfo(true)); } for ($i=0; $i<sizeof ($list); $i++) { for(reset($list[$i]); $key = key($list[$i]); next($list[$i])) { echo "File $i / [$key] = ".$list[$i][$key]."<br />"; } echo "<br />"; } ?>
上記の例は結果を返します:
ファイル 0 / [ファイル名] = data/file1.txt
ファイル 0/[保存ファイル名] = data/file1.txt
ファイル 0 / [サイズ] = 53
ファイル 0 / [圧縮サイズ] = 36
ファイル 0 / [mtime] = 1010440428
ファイル 0/[コメント] =
ファイル 0 / [フォルダー] = 0
ファイル 0 / [インデックス] = 0
ファイル 0 / [ステータス] = ok
ファイル 1 / [ファイル名] = data/file2.txt
ファイル 1/[保存ファイル名] = data/file2.txt
ファイル 1 / [サイズ] = 54
ファイル 1 / [圧縮サイズ] = 53
ファイル 1 / [mtime] = 1011197724
ファイル 1/[コメント] =
ファイル 1 / [フォルダー] = 0
ファイル 1 / [インデックス] = 1
ファイル 1 / [ステータス] = ok
PclZip 例 3. ファイルを解凍します
extract([オプション リスト]): PKZIP 内のアーカイブまたはディレクトリを抽出します。
[オプションリスト] 利用可能なパラメータは、Web サイト (www.phpconcept.net/pclzip/man/en/index.php) で確認できます。これらのパラメータを使用すると、ユーザーは解凍時に、解凍されたファイルのパスの指定および変更、特定のファイルのみを解凍するか特定のファイルを解凍しない指定、またはファイルを文字列出力に解凍するなど、より多くのオプションを使用できるようになります (readme で使用できます)。ファイル)。
下例是一个简单的解压缩档案示例,将压缩档archive.zip内的档案解压缩至目前的目录:
< ?PHP require_once('pclzip.lib.php'); $archive = new PclZip('archive.zip'); if ($archive->extract() == 0) { die("Error : ".$archive->errorInfo(true)); } ?>
下例是进阶的解压缩档案使用,archive.zip中所有档案都解压缩于data/中,而特别指明在install/release中的所有档案也直接丢于data/中,而非data/install/ release:
< ?PHP include('pclzip.lib.php'); $archive = new PclZip('archive.zip'); if ($archive->extract(PCLZIP_OPT_PATH, 'data', PCLZIP_OPT_REMOVE_PATH, 'install/release') == 0) { die("Error : ".$archive->errorInfo(true)); } ?>
官网:http://www.phpconcept.net/pclzip/pclzip-downloads