つやつや
gajapaのサービス
FONサーチ
カテゴリー
新しい記事
最近のコメント
最近のトラックバック
アーカイブ
リンク
OTHER
 

2008,02,06, Wednesday
世の中には、表があれば裏もある。
女がいれば男がいる。

そして、圧縮があれば解凍もある。


と言うワケで、Archive_Zipを使った圧縮に引き続き、解凍方法をです。(汗
PHPでZIPを解凍する方法は、いくつかあってそっちの方が有益かもしれませんが、一応書いておきます。

出来る事は、圧縮ファイル内のファイルリストの出力と、実際の解凍です。
<?php

//解凍する圧縮ファイルを指定
$zip_file = "/usr/hogehoge/example.zip";

//解凍先フォルダ
$dir = '/usr/hoge/hoge/hoge/this/';


require_once("Zip.php");

$objZip = new Archive_Zip($zip_file);

//リストを表示
$files = $objZip->listContent();
print_r($files);

//ファイルを解凍
$p_params = array ('add_path' => $dir);
$result = $objZip->extract($p_params);

?>

フォルダやZIPファイルの指定に、絶対パスを使用していますが、相対パスを使用したところ、ある条件で正しく作動しませんでした。

また、コレは回避できなかったのですが、解凍先フォルダと圧縮ファイル内のフォルダが一緒だと、フォルダが1個省略されてしまいます。

たとえば、
▼解凍フォルダ
/usr/hoge/this/

▼圧縮ファイル内構造
example.zip
└this
 └hoge.xls
だった場合、本当は、
/usr/hoge/this/this/hoge.xlsになるはずですが、
/usr/hoge/this/hoge.xlsになってしまいます。

ソフトに組み込む時には、注意が必要です。

使用ソフト:Archive_Zip 0.1.1 (beta)

関連記事: Archive_Zipを使って、ディレクトリごと圧縮するPHP


| プログラム | comments (0) | trackback (6756) |
2008,02,04, Monday
PHPでZIP圧縮する時、いくつかの方法があるようですが、コレ!という有力な方法はまだ無く試行錯の状態なようです。
調べたところPEAR::Archive_Zipを使った方法がよさそうですが、サブディレクトリごと圧縮すること出来ずちょっと使いづらいように思います。

そこで、サブディレクトリごと圧縮できるようにプログラムを書いてみました。

<?php

$dir = '/usr/hoge/hoge/hoge/this/';            //圧縮するディレクトリ
$zip_file = "/usr/hogehoge/example.zip";    //圧縮した後のファイルの保存場所
$zip_add_dir = "dir";                      //zipファイルに追加するディレクトリ


require_once("Zip.php");

chdir($dir);
$filelist = fFileListLoad($dir);
$filelist = str_replace($dir, '', $filelist);

$p_params = array('add_path' => $zip_add_dir);
$objZip = new Archive_Zip($zip_file);
$fileName = $filelist;
$text = $objZip->create($fileName,$p_params);

function fFileListLoad($dir){
//ファイル一覧を取得する

    if (is_dir($dir)) {
        if ($dh = opendir($dir)) {
            while (($file = readdir($dh)) !== false) {
                if(filetype($dir . $file) == 'dir'){
                    if($file == '.' or $file == '..'){

                    }else{
                        $filelist = array_merge($filelist,fFileListLoad($dir.$file.'/'));
                    }
                }else{
                    $filelist[] = $dir. $file;            //ファイルを導入
                }
            }
            closedir($dh);
        }
    }
    return $filelist;
}

?>


出来上がったexample.zip内のファイル構造は、以下のようになります。
example.zip
└dir
 ├hoge.jpg
 ├hogedir
 │├hoge2.jpg
 │└hoge2.txt
 ├hoge.txt
 └hoge.xls
dirは、「圧縮するディレクトリ」で指定したディレクトリになります。ディレクトリを作りたくなかったら、コメントアウトしてください。
hogedirは、this/ディレクトリ内に有ったディレクトリということです。ディレクトリ構造も含めて圧縮されます。

余談ですが、PEARのインストール方法を調べるとコマンドを使ってインストールの方法を解説しているページが多く、ややこしいしインストールがメンドクサイと敬遠していたのですが、PEARのphpファイルをただ単純にコピーしただけでもいいんですね。

使用ソフト:Archive_Zip 0.1.1 (beta)

関連記事: Archive_Zipを使って、ディレクトリを指定してZIPを解凍するPHP



| プログラム | comments (1) | trackback (2842) |

 
PAGE TOP ↑


Warning: Unknown: Your script possibly relies on a session side-effect which existed until PHP 4.2.3. Please be advised that the session extension does not consider global variables as a source of data, unless register_globals is enabled. You can disable this functionality and this warning by setting session.bug_compat_42 or session.bug_compat_warn to off, respectively in Unknown on line 0