PHP-скрипт для перебора всех файлов в каталоге?
Я ищу PHP-скрипт, который перебирает все файлы в каталоге, чтобы я мог делать что-то с именем файла, например форматировать, печатать или добавлять его в ссылку. Я хотел бы иметь возможность сортировать файлы по имени, типу или по дате создания/добавления/изменения. (Подумайте о причудливом каталоге "index".) Я хотел бы уметь добавлять исключения в список файлов, таких как сам скрипт или другие "системные" файлы. (Как и .
и ..
"справочники".)
будучи тем, что я хотел бы иметь возможность изменять скрипт, мне больше интересно смотреть на PHP-документы и учиться писать их самостоятельно. Тем не менее, если есть какие-либо существующие скрипты, учебники и тому подобное, пожалуйста, дайте мне знать.
8 ответов:
можно использовать DirectoryIterator. Пример из руководства php:
<?php $dir = new DirectoryIterator(dirname(__FILE__)); foreach ($dir as $fileinfo) { if (!$fileinfo->isDot()) { var_dump($fileinfo->getFilename()); } } ?>
если у вас нет доступа к классу DirectoryIterator попробуйте следующее:
<?php $path = "/path/to/files"; if ($handle = opendir($path)) { while (false !== ($file = readdir($handle))) { if ('.' === $file) continue; if ('..' === $file) continue; // do something with the file } closedir($handle); } ?>
использовать
scandir()
функция:<?php $directory = '/path/to/files'; if (! is_dir($directory)) { exit('Invalid diretory path'); } $files = array(); foreach (scandir($directory) as $file) { if ('.' === $file) continue; if ('..' === $file) continue; $files[] = $file; } var_dump($files); ?>
$files = glob('folder/*.{jpg,png,gif}', GLOB_BRACE); foreach($files as $file) { //do your work here }
вы также можете использовать
FilesystemIterator
. Это требует еще меньше кода, чемDirectoryIterator
, и автоматически удаляет.
и..
.$fileSystemIterator = new FilesystemIterator('images'); $entries = array(); foreach ($fileSystemIterator as $fileInfo){ $entries[] = $fileInfo->getFilename(); } var_dump($entries); //OUTPUT object(FilesystemIterator)[1] array (size=14) 0 => string 'aa[1].jpg' (length=9) 1 => string 'Chrysanthemum.jpg' (length=17) 2 => string 'Desert.jpg' (length=10) 3 => string 'giphy_billclinton_sad.gif' (length=25) 4 => string 'giphy_shut_your.gif' (length=19) 5 => string 'Hydrangeas.jpg' (length=14) 6 => string 'Jellyfish.jpg' (length=13) 7 => string 'Koala.jpg' (length=9) 8 => string 'Lighthouse.jpg' (length=14) 9 => string 'Penguins.jpg' (length=12) 10 => string 'pnggrad16rgb.png' (length=16) 11 => string 'pnggrad16rgba.png' (length=17) 12 => string 'pnggradHDrgba.png' (length=17) 13 => string 'Tulips.jpg' (length=10)
ссылка: http://php.net/manual/en/class.filesystemiterator.php
glob () имеет средства для сортировки и сопоставления с образцом. Поскольку возвращаемое значение является массивом, вы можете сделать большую часть все, что нужно.
вы можете использовать этот код для цикла thorugh каталог recusivly:
$path = "/home/myhome"; $rdi = new RecursiveDirectoryIterator($path, RecursiveDirectoryIterator::KEY_AS_PATHNAME); foreach (new RecursiveIteratorIterator($rdi, RecursiveIteratorIterator::SELF_FIRST) as $file => $info) { echo $file."\n"; }
для полноты (так как это, кажется, страница с высоким трафиком), давайте не будем забывать старый добрый
dir()
функции:$entries = []; $d = dir("/"); // dir to scan while (false !== ($entry = $d->read())) { // mind the strict bool check! if ($entry[0] == '.') continue; // ignore anything starting with a dot $entries[] = $entry; } $d->close(); sort($entries); // or whatever desired print_r($entries);