Поиск файлов в каталоге с использованием php - PullRequest
0 голосов
/ 09 октября 2010

Как я могу перечислить все файлы в папке и ее подпапках, используя php

Ответы [ 4 ]

6 голосов
/ 09 октября 2010

Вы можете использовать итераторы 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 в основном сообщает итератору, что родительские элементы должныбыть на первом месте (родители на первом месте).

0 голосов
/ 09 октября 2010

Если вы хотите иметь возможность указать маску или что-то подобное, например * .txt для всех текстовых файлов, то нет лучшей функции, чем " glob ":)

0 голосов
/ 09 октября 2010

Вы можете написать скрипт для получения всех файлов в папке (и подпапках), используя php scandir в массиве.Затем вы можете выполнить поиск в этом массиве для вашего конкретного файла.

Пример:

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

Вывести что-то вроде этого:

Array
(
    [0] => .
    [1] => ..
    [2] => bar.php
    [3] => foo.txt
    [4] => somedir
)
0 голосов
/ 09 октября 2010

Вы говорите о сценарии php, работающем как его собственная программа или веб-приложение.Зачем вам это нужно?

echo shell_exec('find -name *');

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...