2010-10-09 83 views

回答

6

您可以使用SPL迭代器。尤其是RecursiveDirectoryIterator,它将递归遍历给定的目录结构。

像这样:

$realpath = realpath('/path/to/file'); 


$fileObjects = new RecursiveIteratorIterator(new RecursiveDirectoryIterator($realpath), 
       RecursiveIteratorIterator::SELF_FIRST); 

foreach($fileObjects as $key => $object){ 
    if($object->getFilename() === 'filename.png') { 
     echo $object->getPathname(); 
    } 
} 

SELF_FIRST迭代模式基本上告诉迭代器父项目应先放置(父母来第一次)。

+1

'SELF_FIRST'对于仅列出文件并不特别有用,并且可能会混淆OP。 – salathe 2010-10-09 08:20:25

0

你是在谈论一个运行自己的程序或Web应用程序的PHP脚本。你为什么需要这样做?

echo shell_exec('find -name *'); 

但是,那么你真的可以在shell中运行它。

如果您希望Web应用程序运行该脚本,www-data将需要权限才能运行该脚本,并且让它执行此操作非常不安全。相反,您可以让拥有适当权限的用户登录并执行此操作。不完全不安全。

+0

我要搜索一个特定的文件夹中和它的子文件夹,当我运行一个网页。 – Warrior 2010-10-09 06:30:37

+0

你需要什么来准确搜索这个文件? – 2010-10-09 06:51:39

0

您可以编写一个脚本,使用数组中的php scandir来获取文件夹(和子文件夹)中的所有文件。然后你可以搜索你的特定文件的数组。

例子:

<?php 
    $dir = '/tmp'; 
    $files = scandir($dir); 
    print_r($files); 
?> 

输出是这样的:

Array 
(
    [0] => . 
    [1] => .. 
    [2] => bar.php 
    [3] => foo.txt 
    [4] => somedir 
) 
0

如果你希望能够指定一个面具什么的,比如* .txt格式的所有TXT文件,那么有没有更好的功能比“glob” :)