PHP4にもscandir()がほしいぞ

scandir()は便利な関数ですが、PHP5にしかない。 納得いかないので、自分でさらに高機能なmy_scandir()関数を作ってみた。 正規表現検索に排他検索もできちゃうぞ。

PHP4の人、レガシー差別にめげずに頑張ってくださいね。

my_scandir関数

/**
* 特定ディレクトリのファイル、フォルダリストを作成
* 対象のディレクトリを指定し、結果のリストを指定するとそこにリストを格納してくれます。
*
* @author colori
* @param string $dir 検索対象のディレクトリパス
* @param array $list 結果を格納する配列
* @param boolean $rec 再帰的に検索するかどうか
* @param boolean $nodot '.','..'を対象から外すかどうか
* @param string $regexp 検索対象の正規表現
* @param boolean $except 正規表現を除去扱いにするか含有扱いにするか
*/
function my_scandir($dir, &$list, $rec=true, $nodot=true, $regexp='', $except=false) {
$dh  = opendir($dir);
while (false !== ($filename = readdir($dh))) {
if ($nodot and (preg_match("/^.+$/", $filename))) continue;
$path = "$dir/$filename";
if ($regexp) {
if ($except and preg_match($regexp,$path)) continue;
if (!$except and !preg_match($regexp,$path)) continue;
}
if ($rec and is_dir($path)) my_scandir($path, $list, $rec, $nodot, $regexp, $except);
array_push($list, $path);
}
}

使いかた

必須のパラメーターは2つ。 検索対象のディレクトリパスと、検索結果を格納する配列です。

使用例

$list = array();
$dir = '/my/dir';
my_scandir($dir, $list);

これで$list変数に /my/dir 内のファイル/フォルダがフルパスで格納されます。

再帰検索オプション

3つめのパラメーターはフォルダが見つかった際に再帰検索をするかどうかを指定します。 標準では再帰検索するようになっているので、させたくなかったらfalseを指定してください。

ドットファイル排除オプション

4つめのパラメーターにはドットファイル「.」「..」を排除するかどうかを指定できるオプションを付けました。

正規表現オプション

さらに正規表現検索機能もつけました。 5つめのパラメーターにpreg_match()で指定するのと同じような正規表現文字列を指定することで、一致するものだけを検索することができます。

正規表現の排他表現

6つめのパラメーターにtrueを与えると、前述の正規表現に一致しないものだけを検索することができます。

このページをシェアする

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

2009-12-14