Tutorial :PHP file_exists and wildcard



Question:

Is there a way to write the PHP file_exists function so that it searches a directory for a file with an arbitrary extension. For instance, suppose I knew that a file were called "hello", but I didn't know the extension, how would I write a function that searched for a file called hello.* and returned the name of this file? As far as I can tell, file_exists will only search for a string.

Thanks.


Solution:1

You're looking for the glob() function.

file_exists doesn't do any kind of search : it only allows one to know whether a fle exists or not, when knowingf its name.

And, with PHP >= 5.3, you could use the new GlobIterator.


As an example with glob(), the following portion of code :

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

Gives me this output :

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


While this one :

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

Yes, with two * ;-)

Will give me :

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)  


Solution:2

As of PHP5.3, you can also use the GlobIterator to search a directory with wildcards:

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

would return the full paths to all .pdf files in some/path in an array. The above performs about the same as glob(), but iterators provide a more powerful and extensible API.


Solution:3

As long as file_exists returns a BOOLEAN I wrote this small function that accepts a search string with * to look for files... Example:

    searchForFile("temp*");        function searchForFile($fileToSearchFor){          $numberOfFiles = count(glob($fileToSearchFor));          if($numberOfFiles == 0){ return(FALSE); } else { return(TRUE);}      }  


Solution:4

If you need a little more control and are on pre PHP 5.3 you could use a DirectoryIterator or RecursiveDirectoryIterator. Both have a lot of great function for added control and manipulation.

PHP docs are at DirectoryIterator and RecursiveDirectoryIterator


Note:If u also have question or solution just comment us below or mail us on toontricks1994@gmail.com
Previous
Next Post »