ホームページ  >  記事  >  バックエンド開発  >  glob メソッドを使用してフォルダー内のすべてのファイルを走査する

glob メソッドを使用してフォルダー内のすべてのファイルを走査する

WBOY
WBOYオリジナル
2016-07-30 13:30:481044ブラウズ

フォルダー内のすべてのファイルを走査するには、通常、opendir メソッドと readdir メソッドを使用できます。

例: 指定されたディレクトリ内のすべての php ファイルを検索します (サブフォルダーは検索せず) 、コードは次のとおりです:

<code><span><span><?php</span><span>$path</span> = dirname(<span>__FILE__</span>);
<span>$result</span> = traversing(<span>$path</span>);
print_r(<span>$result</span>);

<span><span>function</span><span>traversing</span><span>(<span>$path</span>)</span>{</span><span>$result</span> = <span>array</span>();
    <span>if</span>(<span>$handle</span> = opendir(<span>$path</span>)){
        <span>while</span>(<span>$file</span>=readdir(<span>$handle</span>)){
            <span>if</span>(<span>$file</span>!=<span>'.'</span> && <span>$file</span>!=<span>'..'</span>){
                <span>if</span>(strtolower(substr(<span>$file</span>, -<span>4</span>))==<span>'.php'</span>){
                    array_push(<span>$result</span>, <span>$file</span>);
                }
            }
        }
    }
    <span>return</span><span>$result</span>;
}
<span>?></span></span></code>

glob メソッドを使用してトラバースすると、コードを簡素化できます

<code><span><span><?php</span><span>$path</span> = dirname(<span>__FILE__</span>);
<span>$result</span> = glob(<span>$path</span>.<span>'/*.php'</span>);
print_r(<span>$result</span>);
<span>?></span></span></code>

注その glob が返すのは path+search results のパスになります (例: path='/home/fdipzone')。上記の例は

<code><span>Array</span>
(
    [<span>0</span>] => <span>/home/</span>fdipzone/a.php
    [<span>1</span>] => <span>/home/</span>fdipzone/b.php
    [<span>2</span>] => <span>/home/</span>fdipzone/c.php
)</code>

を返します。これは、opendir および readdir によって返される結果とは異なります。

現在のディレクトリを移動するだけの場合。これは次のように変更できます: glob('*.php');
glob 構文の説明:

<code>array <span>glob</span> ( string <span>$pattern</span> [, <span>int</span><span>$flags</span> = <span>0</span> ] )</code>

glob() この関数は、libc glob() 関数で使用されるルールに従って検索します。すべてが pattern と一致します ファイル パスは、一般的なシェルで使用されるルールと同様です。略語展開やパラメータ置換は行われません。 Glob は、通常のパス マッチングを使用する場合に強力です。

flags 有効なフラグは次のとおりです:
GLOB_MARK - 返される各項目にスラッシュを追加します
GLOB_NOSORT - ディレクトリに表示される元の順序でファイルを返します (ソートされていません)
GLOB_NOCHECK - ファイルがない場合Match は検索に使用されるパターンを返します
GLOB_NOESCAPE - バックスラッシュのエスケープされていないメタ文字
GLOB_BRACE - {a,b,c} を展開して 'a'、'b'、または 'c' に一致します
GLOB_ONLYDIR - ディレクトリ エントリのみを返しますパターンに一致します
GLOB_ERR - エラー情報 (読み取り不能なディレクトリなど) を停止して読み取ります。デフォルトではすべてのエラーを無視します

例: glob メソッドを使用して、指定されたフォルダー (サブフォルダーを含む) を走査します

<code><span><span><?php</span><span>$path</span> = dirname(<span>__FILE__</span>);
<span>$result</span> = <span>array</span>();
traversing(<span>$path</span>, <span>$result</span>);
print_r(<span>$result</span>);

<span><span>function</span><span>traversing</span><span>(<span>$path</span>, &<span>$result</span>)</span>{</span><span>$curr</span> = glob(<span>$path</span>.<span>'/*'</span>);
    <span>if</span>(<span>$curr</span>){
        <span>foreach</span>(<span>$curr</span><span>as</span><span>$f</span>){
            <span>if</span>(is_dir(<span>$f</span>)){
                array_push(<span>$result</span>, <span>$f</span>);
                traversing(<span>$f</span>, <span>$result</span>);
            }<span>elseif</span>(strtolower(substr(<span>$f</span>, -<span>4</span>))==<span>'.php'</span>){
                array_push(<span>$result</span>, <span>$f</span>);
            }
        }
    }
}
<span>?></span></span></code>

著作権ステートメント:この記事はブロガーによるオリジナル記事であり、ブロガーの許可なしに転載することを禁じます。

上記では、コンテンツを含むフォルダー内のすべてのファイルを走査するための glob メソッドの使用方法を紹介しました。PHP チュートリアルに興味のある友人に役立つことを願っています。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。