[CodeIgniter2] Zip解凍クラスをライブラリに作成する

公開
更新日

スポンサーリンク

CodeIgniterにはZip圧縮クラスはあらかじめ用意されているのですが、解凍クラスは用意されていません。

…なんでやねん。

圧縮があって解凍がないとはまったく思わず、しばらく探し続けてしまいました。どうも本当に無いみたいなので、既存のPHPライブラリを改造し、CodeIgniterのライブラリに登録することにしました。

まあ、別にCodeIgniter用ライブラリに改造しなくとも、dUnzip2をrequireしてそのまま使っても構わないのですが、CodeIgniterのライブラリとして使った方が全体の構成もCodeIgniter本来の姿に沿ったものになりますし、コードも見栄えが良いかと思います。

ということで、以下は実行メモです。

まず既存のクラスライブラリを流用するということで、dUnzip2を用いることにします。dUnzip2についてはこちらに簡単に書いています。

Step1

dUnzip2が用意できましたら、dUnzip2.inc.phpをapplication/libraries フォルダに移し、ファイル名をDunzip2inc.phpに変更します。 CodeIgniterのライブラリー命名規則で先頭が大文字である必要があるからです。”inc”の前に入っていたドットを削除しているので気をつけてください。

ファイル名は先頭が大文字でさえあれば、別にDunzip2.phpである必要はありません。好きな名前をつけてください。

Step2

クラス名を変更します。

class dUnzip2{

class Dunzip2inc{

クラス名はファイル名と必ず同じにします。先頭の文字は大文字です。

Step3

<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');

1行目にif ( ! defined('BASEPATH')) exit('No direct script access allowed');と記しておきます。

Step4

77行目付近の以下の部分を__construct()に変更します。また、引数を配列で受け取り、$this->fileNameに代入する値も配列に変えます。

Function dUnzip2($fileName){
 $this->fileName       = $fileName;
 $this->compressedList = 
 $this->centralDirList = 
 $this->endOfCentral   = Array();
}

Function __construct( $array ){
 $this->fileName       = $array['path'];
 $this->compressedList = 
 $this->centralDirList = 
 $this->endOfCentral   = Array();
}

引数を配列に変えるのは、CodeIgniterのライブラリ読み込みメソッドが第2引数に配列を受け取りデータを渡すからです。

以上で改造は終了です。

使い方

使い方はCodeIgniterの組込ライブラリと同じです。

$this->load->library( 'dunzip2inc' , array( 'path' => 'files/777.zip' ) );
$files = $this->dunzip2inc->getList();
$this->dunzip2inc->unzip( 'filename' );

$this->load->library()でクラスを初期化します。第1引数にライブラリ名のdunzip2incを、第2引数に展開したいzipファイルのパスを配列で渡します。

あとはdUnzip2にある使いたいメソッドを、$this->dunzip2inc->methodname()とすることでZipファイルの操作が可能となります。$this->dunzip2inc->getList()でZipファイル内のファイルリストを取得、$this->dunzip2inc->unzip( 'filename' )でZipファイル内の指定したファイルを展開できます。

スポンサーリンク


Comment