2008-11-26
■[PHP][PEAR]File_Archive Symbolic 追加
以前、
このフィルタという機能を使うと上手くいかないだろうか...もう少し調べよう...
と記述したので、以下のような感じで実装してみた。
$files = array("/dir2/a.jpg", "/dir2/c.jpg");
$eregParam = "";
for ($idx = 0; $idx < count($files); $idx++) {
$eregParam .= ("|" . basename($files[$idx]) . '$');
}
$eregParam = "(" . substr($eregParam, 1) . ")"; // "(a.jpg$|c.jpg$)"というパターン文字列を作っている
File_Archive::extract(
File_Archive::filter(
File_Archive::predEreg($eregParam),
File_Archive::read('/dir2/', 'data')
),
//File_Archive::toFiles()
File_Archive::appender($zipFilePath)
);
今回は1ファイルあたり0.05秒ぐらいの計算で格納できている。300ファイルぐらいなら、max_execution_timeに引っかからないで済みそうだ。
でも、上のコードにおける"$eregParam"であるが、300ファイル分"|"で連結するわけで、なんかイマイチだなぁと...
なお、なぜ、"(^a.jpg$|^c.jpg$)"でなくて、"(a.jpg$|c.jpg$)"なのかというと、predEreg()でチェックする際、ディレクトリを含んだファイル名と比較しているからである。本来であれば、"(^/dir2/a\.jpg$|^/dir2/b\.jpg$)"としないといけないのだろうけど、面倒なのと、300ファイルぐらいを考えるととても長くなってしまうのと、保存されているファイルはシステムで付けたファイル名なので、変なファイル名が入り込む余地はよっぽど悪意を持った人がいない限りはないからであるが...本来はちゃんとやるべきだと思う...
ふと思ったが、"^(/dir2/a\.jpg|/dir2/b\.jpg)$"という書き方でもいいのかな...今度確かめてみよう...(と、また書いてしまった...)
トラックバック - http://d.hatena.ne.jp/m383m/20081126/1227708400
リンク元
- 12 http://www.google.co.jp/search?sourceid=navclient&hl=ja&ie=UTF-8&rlz=1T4RNWN_jaJP274JP274&q=IE+++ダウングレード
- 7 http://www.google.co.jp/search?hl=ja&client=firefox-a&rls=org.mozilla:ja:official&hs=Iz6&q=smarty+count&btnG=検索&lr=lang_ja
- 6 http://www.google.co.jp/search?sourceid=navclient&aq=t&hl=ja&ie=UTF-8&rls=GFRD,GFRD:2007-47,GFRD:ja&q=smarty+配列+要素数
- 5 http://blog-search.yahoo.co.jp/search?fr=top_ga1&ei=UTF-8&p=容疑者Xの献身
- 5 http://d.hatena.ne.jp/keyword/堤真一
- 4 http://d.hatena.ne.jp/keyword/Excel_Reviser
- 3 http://blog-search.yahoo.co.jp/search?ei=UTF-8&p=胼鎡演??羃?&n=10&so=dd&merge=on&tflg=none&Keywords=福山雅治&xargs=12KPjg1u9Sv4GmmvmnN-mZDrDaoAtP0cHwsd5sCpIIXYZL8wZqROJ5LPKfwNB7Oe5y7AjQacKnrfQDL4f5ucu6&hData=12KP
- 3 http://blog-search.yahoo.co.jp/search?fr=top_ga1&ei=UTF-8&p=松雪
- 3 http://blog-search.yahoo.co.jp/search?p=堤真一&ei=UTF-8
- 3 http://www.google.co.jp/search?q=javascript+div+中央&ie=utf-8&oe=utf-8&aq=t&rls=com.ubuntu:ja-JP:unofficial&client=firefox-a

