web-dev-qa-db-ja.com

PHP file_existsとワイルドカード

PHP file_exists関数を作成して、任意の拡張子を持つファイルをディレクトリで検索する方法はあります。たとえば、ファイルが「hello」と呼ばれていることを知っていたが、拡張子がわからない場合、hello。*というファイルを検索してこのファイルの名前を返す関数を作成するにはどうすればよいですか?私が知る限り、file_existsは文字列のみを検索します。

ありがとう。

52
bsamek

あなたは glob() 関数を探しています。

_file_exists_は検索を行いません。名前を知っている場合、ファイルが存在するかどうかを知ることしかできません。

そして、PHP> = 5.3では、新しい GlobIteratorを使用できます


glob()の例として、次のコード部分:

_$list = glob('temp*.php');
var_dump($list);
_

私にこの出力を与えます:

_array
  0 => string 'temp-2.php' (length=10)
  1 => string 'temp.php' (length=8)
_


これは:

_$list = glob('te*-*');
var_dump($list);
_

はい、2つの_*_;-)

私に与えます:

_array
  0 => string 'temp-2.php' (length=10)
  1 => string 'test-1.php' (length=10)
  2 => string 'test-curl.php' (length=13)
  3 => string 'test-phing-1' (length=12)
  4 => string 'test-phpdoc' (length=11)
_
92
Pascal MARTIN

PHP5.3以降、 GlobIterator を使用して、ワイルドカードでディレクトリを検索することもできます。

_$it = iterator_to_array(
    new GlobIterator('/some/path/*.pdf', GlobIterator::CURRENT_AS_PATHNAME) );
_

配列のsome/pathにあるすべての.pdfファイルへのフルパスを返します。上記の機能はglob()とほぼ同じですが、反復子はより強力で拡張可能なAPIを提供します。

7
Gordon

File_existsがBOOLEANを返す限り、*を含む検索文字列を受け入れてファイルを検索するこの小さな関数を作成しました...例:

    searchForFile("temp*");

    function searchForFile($fileToSearchFor){
        $numberOfFiles = count(glob($fileToSearchFor));
        if($numberOfFiles == 0){ return(FALSE); } else { return(TRUE);}
    }
5
luciomonter

もう少し制御が必要でpre PHP 5.3を使用している場合は、DirectoryIteratorまたはRecursiveDirectoryIteratorを使用できます。どちらも制御と操作を追加するための多くの優れた機能を備えています。

PHPドキュメントは DirectoryIterator および RecursiveDirectoryIterator にあります

1
Adam Gotterer