add to hatena hatena.comment (3) add to del.icio.us (0) add to livedoor.clip (1) add to Yahoo!Bookmark (0) Total: 4

CakePHP zip圧縮コンポーネント

CodeIgniterの標準ライブラリにはZip圧縮クラスがあり、簡単に以下のような機能を実装することができます。
・Zipアーカイブを作成し、サーバーに保存やダウンロードを行う
・サーバーのファイルやディレクトリをZipに追加
・動的にテキストデータをZipに追加

このクラスをCakePHPのコンポーネントクラスとして利用できるように少々改良しました。

ソースコード

/app/controllers/components/zip.php

利用方法

ZipCompornent(zip.php)を
/app/controllers/components
に配置。

コントローラー側で利用宣言を行います。

PHP:
  1. var $components = array('Zip');

あとは、上記CodeIgniterのマニュアルと同様に利用できます。
($this->zip ではなく $this->Zip となります)

使用例

サーバ上のフォルダにZipを保存し、ダウンロードさせる例。

PHP:
  1. $name = 'mydata1.txt';
  2. $data = 'A Data String!';
  3.  
  4. $this->Zip->add_data($name, $data);
  5.  
  6. // Zipファイルをサーバのフォルダに書き込みます。"my_backup.zip" という名前にします。
  7. $this->Zip->archive('/path/to/directory/my_backup.zip');
  8.  
  9. // "my_backup.zip"という名前で、デスクトップにファイルをダウンロードします。
  10. $this->Zip->download('my_backup.zip');

サーバ上にあるファイルを圧縮する

PHP:
  1. $path1 = '/path/to/photo1.jpg';
  2. $path2 = '/path/to/photo2.jpg';
  3. $this->Zip->read_file($path1);
  4. $this->Zip->read_file($path2);
  5. // "my_backup.zip"という名前でダウンロードさせます。
  6. $this->Zip->download('my_backup.zip');

ファイル圧縮時に含まれるディレクトリ構造を維持したい場合は、第2引数に TRUE を指定します。

PHP:
  1. $path = '/path/to/photo.jpg';
  2. $this->Zip->read_file($path, TRUE);

サーバ上のディレクトリとサブディレクトリを再帰的に圧縮する

PHP:
  1. $path = '/path/to/your/directory/';
  2. $this->Zip->read_dir($path);

関連するその他の記事

Comments

Leave a Reply