Hatena::Diary

たぶログ このページをアンテナに追加 RSSフィード

2008-11-26

[][]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)$"という書き方でもいいのかな...今度確かめてみよう...(と、また書いてしまった...)

スパム対策のためのダミーです。もし見えても何も入力しないでください
ゲスト


画像認証


2007 | 07 | 08 | 09 | 10 | 11 | 12 |
2008 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 |
2009 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 |