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',
// 保存するファイル
echo '正常に作成されました!';
} else {
echo 'ファイル作成エラー';
}
?> 🎜> このスクリプトは非常に単純ですが、詳しく見てみる価値があります:
をインポートします。 $obj = new Archive_Zip('test.zip'); // zip ファイルの名前
foreach ($f as $k => $v) { echo "$k: $vn";
}
echo "n";
}
?>
listContent() の出力は、配列で構成される構造体配列です。各配列要素は、アーカイブ ファイル内の個別のファイルを表します。通常、各要素には、対応するファイルの名前、インデックス位置、ステータス、サイズ (圧縮後および圧縮前)、最終変更時刻などの関連情報が格納されます。この情報はループを使用して簡単に抽出でき、リスト B に示すように、送信しやすいように再フォーマットされます。出力の例を次に示します (リスト C):
stored_filename: mystuff/alcon.xls
size: 113664compressed_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('ファイルが存在しません');
}
echo '追加されました!';
} else {
echo 'ファイル追加エラー';
}
?>
$obj = new Archive_Zip('test.zip') // zip ファイルの名前
} else {
die('ファイルが存在しません');
}
echo '正常に削除されました!';
} else {
echo 'ファイル削除エラー';
>
ここでは、削除するファイルの配列が作成され、delete() メソッドに入力されます。 delete() 呼び出しの特別なパラメータ「by_name」に注意してください。これは、ファイル名と正確に一致するファイルのみを削除するように Archive_Zip に指示します。削除が成功すると、delete() メソッドは true を返します。
if (file_exists('test.zip') )) {
$obj = new Archive_Zip('test.zip') // zip ファイルの名前
die('ファイルが存在しません');
}
if ($obj->delete(array('by_preg' => "/.*doc$/"))) { // すべての DOC ファイル
echo '正常に削除されました!';} else {
echo 'ファイル削除エラー';
}
?>
上の例に示すように、PEAR の Archive_Zip クラスには多くの用途があり、必要なのは数行だけです。これにより、ZIP ファイルとのかなり複雑な操作を実行できるようになります。上記のサンプル スクリプトが、日常の開発活動でこのクラスを使用する方法についてインスピレーションを与え、実験に興味を持っていただければ幸いです。楽しいプログラミングを!