2010-10-09 2 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

0

Вы говорите о для PHP скрипт работает в своей собственной программе или веб-приложения. Зачем вам это нужно?

echo shell_exec('find -name *'); 

Но тогда вы действительно можете просто запустить это в оболочке.

Если вы хотите, чтобы веб-приложение запускало это, WWW-данные будут нуждаться в разрешениях для запуска этого сценария, и это очень опасно, если он это сделает. Вместо этого вы можете иметь доступ к пользователю с соответствующим разрешением и сделать это. Не совсем небезопасно.

+0

Я хочу найти конкретный файл в папке и его подпапку, когда я запускаю веб-страницу. – Warrior

+0

Что вам нужно для поиска именно этого файла? –

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 для всех текстовых файлов, то нет лучше, чем функция «glob» :)

Смежные вопросы