[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ファイル内の指定したファイルを展開できます。
スポンサーリンク
CodeIgniterカテゴリーの投稿
- [CodeIgniter3] クエリービルダーのINSERTでエスケープを行わない
- [CodeIgniter3] CRONでコントローラーのメソッドを呼び出す
- [CodeIgniter3] さくらレンタルサーバー設置時の.htaccess
- [CodeIgniter3] ControllerとViewを作成
- [CodeIgniter3] xampp開発環境へのインストール
- [CodeIgniter2] サイトマップを作る
- [CodeIgniter2] form_open()のメソッドをGETにする
- [CodeIgniter2] 多言語化時にオートロードで任意言語ファイルを読み込む
- [CodeIgniter2] ActiveRecordクラスjoinメソッド
- [CodeIgniter2] アクティブレコードでReplace文を使う