web-dev-qa-db-ja.com

PHPの特定の拡張子でフィルタリングされたディレクトリからファイルを取得する最良の方法

可能性のある複製:
ディレクトリ内の特定のファイルのPHPリスト
php scandir($ dir)を使用して画像のみを取得してください!

だから今私はディレクトリを持っていると私はファイルのリストを取得しています

$dir_f = "whatever/random/";
$files = scandir($dir_f);

ただし、これはディレクトリ内のすべてのファイルを取得します。最も効率的な方法で、.iniなどの特定の拡張子を持つファイルのみを取得するにはどうすればよいですか。

28
CodeCrack

PHPには、必要なファイルのみをキャプチャするのに役立つ優れた機能があります。呼び出されるglob()

glob-パターンに一致するパス名を見つける

以下に使用例を示します-

_$files = array();
foreach (glob("/path/to/folder/*.txt") as $file) {
  $files[] = $file;
}
_

参照 -

64
Lix

複数の拡張子を検索したい場合、 preg_grep() がフィルタリングの代替手段です:

 $files = preg_grep('~\.(jpeg|jpg|png)$~', scandir($dir_f));

globにも同様の追加構文がありますが。これは、さらに条件がある場合にほとんど意味があります。~i大文字と小文字を区別しないフラグ、または結合リストをフィルタリングできます。

14
mario

PHPの glob() 関数では、検索するパターンを指定できます。

9
Linus Kleen

GlobIteratorを使用して試すことができます

$iterator = new \GlobIterator(__DIR__ . '/*.txt', FilesystemIterator::KEY_AS_FILENAME);
$array = iterator_to_array($iterator);
var_dump($array)
6
Baba

glob($ pattern、$ flags)

<?php
foreach (glob("*.txt") as $filename) {
    echo "$filename size " . filesize($filename) . "\n";
}
?>

これを試して

//path to directory to scan
$directory = "../file/";

//get all image files with a .txt extension.
$file= glob($directory . "*.txt ");

//print each file name
foreach($file as $filew)
{
echo $filew;
$files[] = $filew; // to create the array

}
1
Database_Query

正規表現はテストしていませんが、次のようなものです:

if ($handle = opendir('/file/path')) {

    while (false !== ($entry = readdir($handle))) {
        if (preg_match('/\.txt$/', $entry)) {
            echo "$entry\n";
        }
    }

    closedir($handle);
}
1
firecracker