ホームページ  >  記事  >  バックエンド開発  >  php ZipArchive classの使用例を詳しく解説_PHPチュートリアル

php ZipArchive classの使用例を詳しく解説_PHPチュートリアル

WBOY
WBOYオリジナル
2016-07-13 10:48:321338ブラウズ

php ZipArchive はファイルの圧縮と解凍を行うことができる機能ですが、このクラスを使用する前に php.ini に extension=php_zip.dll を設定する必要があります。 ? このクラス ライブラリを使用できるように、それを削除してから Apache を再起動します。

ziparchive のオプションのパラメーター

1.ZipArchive::addEmptyDir

新しいファイルディレクトリを追加します

2.ZipArchive::addFile

指定された zip アーカイブにファイルを追加します。

3.ZipArchive::addFromString

追加されたファイルには、コンテンツも同時に追加されます

4.ZipArchive::close

zipアーカイブを閉じる

5.ZipArchive::extractTo

圧縮パッケージを解凍します

6.ZipArchive::open

zip アーカイブを開く

7.ZipArchive::getStatusString

エラー情報、圧縮情報などを含む、圧縮中のステータス内容を返します。

8.ZipArchive::deleteIndex

圧縮パッケージ内の特定のファイルを削除します。たとえば、 deleteIndex(0) は最初のファイルを削除します

9.ZipArchive::deleteName

圧縮パッケージ内の特定のファイル名を削除し、そのファイルも削除します。
...
*/


1.zipファイルを解凍します

コードは次のとおりです コードをコピー
$zip = new ZipArchive;//新しい ZipArchive オブジェクトを作成します
/*
ZipArchive オブジェクト経由で zip ファイルを処理する
$zip->open メソッドのパラメータは、処理する zip ファイルの名前を示します。
zip ファイル オブジェクトの操作が成功すると、$zip->open メソッドは TRUE を返します
*/
if ($zip->open('test.zip') === TRUE)
{
$zip->extractTo('images');//現在のパス下のimagesフォルダーのサブフォルダーphpに抽出するものとします
$zip->close();//処理されたzipファイルを閉じます
}

2. ファイルを zip ファイルに圧縮します

コードは次のとおりです コードをコピー
$zip = 新しい ZipArchive;
/*
$zip->open メソッドの最初のパラメータは、処理される zip ファイルの名前を示します。
2 番目のパラメータは、処理モードを示します。ZipArchive::OVERWRITE は、zip ファイルが存在する場合、元の zip ファイルが上書きされることを示します。
パラメータで ZIPARCHIVE::CREATE が使用されている場合、システムはコンテンツを元の zip ファイルに追加します。
zip ファイルにコンテンツを複数回追加しない場合は、ZipArchive::OVERWRITE を使用することをお勧めします。
これら 2 つのパラメータを使用すると、zip ファイルが存在しない場合、システムが自動的に作成します。
zip ファイル オブジェクトの操作が成功すると、$zip->open メソッドは TRUE を返します
*/
if ($zip->open('test.zip', ZipArchive::OVERWRITE) === TRUE)
{
$zip->addFile('image.txt');//現在のパスに追加されたファイル名が image.txt であると仮定します
$zip->close();
}

3. zip ファイルにファイルを追加します

コードは次のとおりです コードをコピー
$zip = 新しい ZipArchive;
$res = $zip->open('test.zip', ZipArchive::CREATE);
if ($res === TRUE) {
$zip->addFromString('test.txt', 'ファイルの内容はここにあります');
$zip->close();
「ok」をエコーし​​ます;
} その他 {
エコー「失敗しました」;
}

4. フォルダーを zip ファイルに圧縮します

コードは次のとおりです コードをコピー

関数 addFileToZip($path, $zip) {
$handler = opendir($path); //$path で指定された現在のフォルダーを開きます。
/*
フォルダー内のすべてのファイルとフォルダーをループで読み取ります
このうち $filename = readdir($handler) は、ループするたびに読み込んだファイル名を $filename に代入します。 無限ループに陥らないようにするには、$filename !== false にする必要があります。
必ず !== を使用してください。ファイル名が「0」である場合、またはシステムが false を表すとみなした場合、!= を使用するとループが停止します
*/
while (($filename = readdir($handler)) !== false) {
if ($filename != "." && $filename != "..") {//フォルダー ファイル名は '.' と '..' です。これらは操作しないでください
if (is_dir($path . "/" . $filename)) {// 読み取られたオブジェクトがフォルダーの場合、再帰
addFileToZip($path . "/" . $filename, $zip);
} else { //ファイルを zip オブジェクトに追加します
$zip->addFile($path . "/" . $filename);
}
}
}
@closedir($path);
}

$zip = 新しい ZipArchive();

if ($zip->open('images.zip', ZipArchive::OVERWRITE) === TRUE) {
addFileToZip('images/', $zip); // メソッドを呼び出し、パッケージ化するルート ディレクトリを操作し、ZipArchive オブジェクトをメソッドに渡します
$zip->close(); //処理されたzipファイルを閉じます
}

ファイル名だけがわかっていて、ファイルの具体的なパスがわからない場合は、インデックスで指定したファイル名を検索し、そのインデックスを頼りにコンテンツを取得できます。

コードは次のとおりですコードをコピー

$zip = 新しい ZipArchive;
if ($zip->open('test.zip') === TRUE) {
$index=$zip->locateName('example.php', ZIPARCHIVE::FL_NOCASE|ZIPARCHIVE::FL_NODIR);
$contents = $zip->getFromIndex($index);
}
?>

上記で取得したインデックスは、locateName メソッドに依存しています。圧縮パッケージ内の複数のパスに同じ名前のファイルがある場合、すべてのファイルのインデックスを取得したい場合は、最初のファイルのインデックスのみを返すことができるようです。同じ名前の場合、愚かな方法を使用してループ内で検索することしかできません。

コードは次のとおりですコードをコピー
$zip = 新しい ZipArchive;
if ($zip->open('test.zip') === TRUE) {
for($i = 0; $i numFiles; $i++)
{
If(substr_count($zip->getNameIndex($i), 'example.php')>0){
                                                                                }
}
}
?>

http://www.bkjia.com/PHPjc/632774.html

tru​​ehttp://www.bkjia.com/PHPjc/632774.html技術記事 php ZipArchive は php に付属している機能とも言えますが、このクラスを使用する前に php.ini に extension=php_zip.dll を追加する必要があります...
声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。