ホームページ  >  記事  >  php教程  >  PHPスクリプトとPEARクラスを使用してZIPアーカイブファイルを作成する方法

PHPスクリプトとPEARクラスを使用してZIPアーカイブファイルを作成する方法

WBOY
WBOYオリジナル
2016-06-21 08:57:58987ブラウズ

Web アプリケーションを開発する場合、CSV データ、パスワード ファイル、XML エンコードされたコンテンツ、さまざまな形式のバイナリ データなど、さまざまな形式のファイルに遭遇する可能性が非常に高くなります。 PHP スクリプトは、これらのファイルと頻繁に対話し、データを読み書きする必要があります。扱うファイル形式が非常に多いため、指定できるほぼすべてのファイル形式に接続して使用するために、PHP に非常に多くの種類の組み込み関数や外部ライブラリがあることは驚くべきことではありません。

このガイドでは、アプリケーション開発者がほぼ毎日遭遇するファイル形式の 1 つである ZIP 形式について説明します。通常、電子メールやリモート接続を介してファイルを転送するために使用されるこの形式は、複数のファイルを 1 つのアーカイブに圧縮することで、ファイルのハード ドライブの占有領域を削減し、より簡単に移動できるようにします。 PHP は、ZZipLib プラグインと PEAR の Archive_Zip クラスを通じて、これらの ZIP ファイルを読み取り、作成できます。

すでに Apache が実行され、PHP がインストールされ、PEAR Archive_Zip クラスが正しくインストールされていることを前提とします。

注: PEAR Archive_Zip パッケージは、Web から直接インストールすることも、ダウンロードすることも、提供されている手順を使用することもできます。

ZIP アーカイブの作成

簡単な例から始めましょう。他のいくつかのファイルを含む ZIP アーカイブを動的に作成します。リスト A のスクリプトから始めます。

リスト A

include ('Archive/Zip.php'); // インポート

$obj = new Archive_Zip('test. zip'); // zip ファイルの名前

$files = array('mystuff/ad.gif',
// 保存するファイル

if ($obj- >create($files)) {

echo '正常に作成されました!';
} else {
echo 'ファイル作成エラー';
}
?> 🎜> このスクリプトは非常に単純ですが、詳しく見てみる価値があります:

まず、最初のステップとして、Archive_Zip クラスのインスタンスを作成します。次に、作成するアーカイブ ファイルのパスと名前を使用してインスタンスを初期化します。 。この例では、アーカイブ ファイルの名前は test.zip で、現在のディレクトリにあります。

次に、圧縮するファイルとそのファイルのハードディスク上の場所をリストする配列を初期化します。これらの場所は絶対または相対的にリストされますが、考慮すべき重要な点が 1 つあります。これらのファイルまたはディスクの場所に対するアクセス許可。

最後に、create() メソッドを使用して、指定したファイルを圧縮および結合してアーカイブ ファイルを実際に構築します。このメソッドは、ファイルのリストを入力として受け取り、アーカイブ ファイルが正常に作成されたかどうかを示すブール値を返します。スクリプトには、ファイルが作成されるディレクトリへの書き込み権限が必要であることに注意することが非常に重要です。そうでないと、create() メソッドが失敗します。これは、ほとんどの初心者が失敗するよくある間違いです。

次に、ローカル システム構成を反映するようにソース ファイル リストと宛先ファイルの場所を変更した後、上記のスクリプトを実行してみます。すべてがうまくいけば、Archive_Zip は、test.zip という名前の ZIP アーカイブに圧縮された、リストしたファイルを見つけることができるはずです。

ZIP アーカイブ ファイルの内容を表示する

では、既存の ZIP アーカイブ ファイルの内容を表示するにはどうすればよいでしょうか? Archive_Zip では、listContent() メソッドを介してこれを行うことができます。以下に例を示します (リスト B):

リスト B

include ('Archive/Zip.php') //

をインポートします。 $obj = new Archive_Zip('test.zip'); // zip ファイルの名前

$files = $obj->listContent() // ファイル情報の配列

($files as $f) {

foreach ($f as $k => $v) { echo "$k: $vn";

}
echo "n";
}
?>

listContent() の出力は、配列で構成される構造体配列です。各配列要素は、アーカイブ ファイル内の個別のファイルを表します。通常、各要素には、対応するファイルの名前、インデックス位置、ステータス、サイズ (圧縮後および圧縮前)、最終変更時刻などの関連情報が格納されます。この情報はループを使用して簡単に抽出でき、リスト B に示すように、送信しやすいように再フォーマットされます。出力の例を次に示します (リスト C):

リスト C

filename: mystuff/alcon.xls

stored_filename: mystuff/alcon.xls

size: 113664

compressed_size: 35902
mtime: 1141996836
comment:
folder:
index: 0
status: ok

既存の ZIP アーカイブに新しいファイルを追加します

Archive_Zip クラスの興味深い機能は、add() メソッドを通じて既存のアーカイブ ファイルに新しいファイルを追加できることです。これを説明するために、test.zip に戻って新しいファイルを追加してみます (リスト D):

リスト D

include ('Archive/ Zip.php'); //

if (file_exists('test.zip')) {
$obj = new Archive_Zip('test.zip'); // zip ファイルの名前🎜>} else {
die('ファイルが存在しません');
}

$files = array('otherstuff/montecarlo.png'); // 保存する追加フ​​ァイル

if ($obj->add($files)) {

echo '追加されました!';
} else {
echo 'ファイル追加エラー';
}
?>

ご覧のとおり、既存のアーカイブに新しいファイルを追加する手順は、新しいアーカイブの作成と非常に似ています。アーカイブ ファイルを表す疑問符を指す新しい Archive_Zip オブジェクトを初期化します。追加するファイルのリストを表す配列を作成し、この配列を add() メソッドに入力します。 create() メソッドと同様に、add() は追加が成功したかどうかを示すブール論理信号を返します。前と同様、重要な問題は、十分な権限を忘れないことです。ソース ファイルを読み取り、新しく圧縮されたアーカイブをハード ドライブに書き戻すための適切な権限がスクリプトにあることを必ず確認してください。

既存の ZIP アーカイブからのファイルの削除

ファイルの追加と同様に、ファイルを削除することもできます。 Archive_Zip クラスには、既存のアーカイブからファイルを削除できる delete() メソッドがあります。リスト E はこの点を示しています。 .

List E

include ('Archive/Zip.php') //

if (file_exists('test.zip); ')) {

$obj = new Archive_Zip('test.zip') // zip ファイルの名前
} else {
die('ファイルが存在しません');
}

$files = array('mystuff/ad.gif', 'otherstuff/montecarlo.png'); // 削除するファイル

if ($obj->delete(' by_name' => $files))) {

echo '正常に削除されました!';
} else {
echo 'ファイル削除エラー';
>
ここでは、削除するファイルの配列が作成され、delete() メソッドに入力されます。 delete() 呼び出しの特別なパラメータ「by_name」に注意してください。これは、ファイル名と正確に一致するファイルのみを削除するように Archive_Zip に指示します。削除が成功すると、delete() メソッドは true を返します。

この形式の選択的削除に加えて、delete() メソッドは、特定のタイプまたは正規表現に一致するファイルの一括破棄もサポートしています。 Perl と PHP の両方の正規表現は、「by_ereg」または「by_preg」パラメータを使用してサポートされます。リスト F は、このメソッドを使用して、Perl 正規表現を使用してアーカイブ内のすべての *.doc ファイルを削除する方法の例です。

List F

include ('Archive/Zip.php') //

if (file_exists('test.zip') )) {
$obj = new Archive_Zip('test.zip') // zip ファイルの名前

} else {

die('ファイルが存在しません');
}

if ($obj->delete(array('by_preg' => "/.*doc$/"))) { // すべての DOC ファイル
echo '正常に削除されました!';} else {

echo 'ファイル削除エラー';
}
?>

上の例に示すように、PEAR の Archive_Zip クラスには多くの用途があり、必要なのは数行だけです。これにより、ZIP ファイルとのかなり複雑な操作を実行できるようになります。上記のサンプル スクリプトが、日常の開発活動でこのクラスを使用する方法についてインスピレーションを与え、実験に興味を持っていただければ幸いです。楽しいプログラミングを!

速やかにあなたの名前を明記して著者に連絡してください。連絡先電子メール: edu#chinaz.com (# を @ に変更)。



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