2010年7月12日 星期一

pclzip

同事之前幫moodle寫了作業打包下載功能,用的是pclzip。最近發現有幾筆產生的壓縮檔並沒有乖乖的在指定的位置!?於是按照課號查找,發現打包下載的連結並未出現在網頁上,而那幾筆在錯誤位址的壓縮檔,下載下來後無法解開(壓縮檔破損),且打包檔案也有缺少。
上網查了一下,在做create時可以加入參數PCLZIP_OPT_NO_COMPRESSION,以不加壓方式打包即可。
以網路上的範例來做修改
include_once('pclzip.lib.php');
$archive = new PclZip('archive.zip');
$v_list = $archive->create('data/file.txt,data/text.txt',
     PCLZIP_OPT_NO_COMPRESSION,
     PCLZIP_OPT_REMOVE_PATH, 'data',
     PCLZIP_OPT_ADD_PATH, 'install');
if ($v_list == 0) {
     die("Error : ".$archive->errorInfo(true));
}
除了這點之外,最令我頭大的是若檔名含有中文,則下載下來的壓縮檔內檔名便會出現亂碼。雖然有在寫網頁的人都知道要避免使用中文檔名,但是一般使用者可是不會管你那麼多的。由於OS是linux介面,而且這邊使用的pclzip似乎沒有支援utf-8,所以才會產生亂碼的情況。這時候需要修改pclzip.lib.php的第2780行附近,function privAddFile內其中一段設定打包進壓縮檔檔案名稱的地方(按照上面的例子來說stored_filename就會是file.txt跟text.txt,因為路徑data被設定為去除了--PCLZIP_OPT_REMOVE_PATH, 'data')
    $p_header['filename'] = $p_filename;
// TBC : Removed    $p_header['stored_filename'] = $v_stored_filename;
    $p_header['stored_filename'] =
                        iconv('utf-8','big5',$p_filedescr['stored_filename']);
這樣就可以看到中文囉!

學藝不精,花了一天時間才解決問題...
--
參考網站
http://moodle.club.tw/moodle/mod/forum/discuss.php?d=1392
http://www.blueshop.com.tw/board/show.asp?subcde=BRD20091208184635ZIQ&fumcde=&PAGE=1
http://support.oss.org.tw/?q=node/147
http://itisjoe.pixnet.net/blog/post/14758894
http://modxcms.com/forums/index.php?topic=48191.0

沒有留言:

張貼留言