読者です 読者をやめる 読者になる 読者になる

glob()に GLOB_BRACE + GLOB_NOSORT フラグをつけて、優先順位をつけてファイルパスを取得

php

すごい。こんなこともできるのねー。

<?
$basedir = "/path/to/temp/";
$filename= "hogehoge";

$extension = array( ".saisyo", ".tugi", ".sonotugi", ".saigo" );

$pattern = $basedir.$filename;
if ( is_array( $extension ) ) {
    $pattern .= "{".implode( ",", $extension )."}";
} else {
    $pattern .= $extension;
}

$array_path = glob( $pattern, GLOB_BRACE + GLOB_NOSORT );

print_r( $array_path );
?>

GLOB_BRACEとGLOB_NOSORTはglob関数の引数のflagsで両方指定している。



pattern

パターン。チルダの展開やパラメータ置換は行いません。
flags

有効なフラグは次のとおりです。

* GLOB_MARK - 各ディレクトリにスラッシュを追加します
* GLOB_NOSORT - ディレクトリに存在するファイルを返します (ソートはされません)
* GLOB_NOCHECK - 検索パターンにマッチするファイルが見つからない場合に、 検索パターン自身を返します
* GLOB_NOESCAPE - バックスラッシュによるメタ文字のクォートを行いません
* GLOB_BRACE - {a,b,c} を展開し「a」、「b」あるいは「c」のいずれかにマッチさせます
* GLOB_ONLYDIR - パターンにマッチするディレクトリのみを返します
* GLOB_ERR - (ディレクトリが読めないなどの) 読み込みエラー時に停止します。デフォルトではエラーは無視されます。



/path/to/temp/にこのようにファイルがあったときにもGLOB_BRACEで指定した順番で、配列が作れる。

$ ls -l /path/to/temp/
hogehoge.saigo
hogehoge.saisyo
hogehoge.tugi
0 => /path/to/temp/hogehoge.saisyo
1 => /path/to/temp/hogehoge.tugi
2 => /path/to/temp/hogehoge.saigo