複数のファイルをアーカイブして送信する

広告

複数のディレクトリやファイル名をアーカイブしてからクライアントへ送信する方法を確認します。HTTP_Downloadクラスで用意されている「sendArchive」メソッドを使いかます。このメソッドはクラスメソッドです。

※ただしこのメソッドの使用は推奨されていないようです。実際には次のページの「HTTP_Download_Archive」クラスを使って下さい。

引数:
  $name  アーカイブファイルの名前
  $files  アーカイブの対象となるディレクトリやファイル名のリスト
  $type  アーカイブのフォーマット (TAR, TGZ, BZ2 または ZIP)
  $add_path  ファイルの前に追加するパス
  $strip_path  ファイルから外すべきパス
戻り値:
  成功時にはTRUE、失敗時にはPEAR_Error

1番目の引数にはダウンロードされるアーカイブのファイル名を指定します。

2番目の引数にはアーカイブの対象となるディレクトリやファイル名の一覧を指定します。指定は配列を使って順に対象となるディレクトリやファイル名を指定します。

3番目の引数にはアーカイブのフォーマットを指定します。指定できる値は次の通りです。

フォーマット指定する値
TARHTTP_DOWNLOAD_TAR
TGZHTTP_DOWNLOAD_TGZ
BZ2HTTP_DOWNLOAD_BZ2
ZIPHTTP_DOWNLOAD_ZIP

使い方としては次のようになります。

require_once("HTTP/Download.php");

HTTP_Download::sendArchive(
  "download.zip",
  array("./download/", "./download2/"),
  HTTP_DOWNLOAD_ZIP
);

サンプルプログラム

では簡単なサンプルで実際に試してみます。

sample7-1.php

<?php
require_once("HTTP/Download.php");

HTTP_Download::sendArchive(
  "download.zip",
  array("./download/text/", "./download/img/"),
  HTTP_DOWNLOAD_ZIP
);

?>

ダウンロード用PHPを呼び出すためのHTMLファイルを用意しました。

download7-1.html

<html>
<head><title>PHP TEST</title></head>
<body>

<p>ダウンロードテスト</p>

<p>
<a href="./pearhttpdownloadtest4.php">ダウンロード</a>
</p>

</body>
</html>

ダウンロードするファイルはPHPファイルが置かれているディレクトリに「download」と言うディレクトリを作成し、その中に更に「text」と「img」ディレクトリを作成してから「text」ディレクトリの中には「sample.txt」ファイルを置き「img」ディレクトリの中には「star.png」を置いておきました。

ではダウンロード用HTMLファイルをWWWサーバに設置しブラウザで見てみると下記のように表示されます。

アーカイブして送信する

「ダウンロード」と書かれたリンクをクリックして下さい。

アーカイブして送信する

指定したアーカイブ名でダウンロードを行います。実際にダウンロードされたファイルを見てみると次のように指定したディレクトリに含まれていたファイルがアーカイブされていることが確認できます。

アーカイブして送信する

( Written by Tatsuo Ikura )