Ответ 1
Вы можете использовать DirectoryIterator. Пример из руководства php:
<?php
$dir = new DirectoryIterator(dirname(__FILE__));
foreach ($dir as $fileinfo) {
if (!$fileinfo->isDot()) {
var_dump($fileinfo->getFilename());
}
}
?>
Я ищу PHP script, который просматривает все файлы в каталоге, чтобы я мог делать что-то с именем файла, например, форматировать, печатать или добавлять его к ссылке. Я хотел бы иметь возможность сортировать файлы по имени, типу или по дате, созданной/добавленной/измененной. (Подумайте, "индекс индексирования" ). Я также хотел бы добавить исключения в список файлов, таких как сам script или другие "системные" файлы. (Как каталоги .
и ..
".)
Будучи тем, что я хотел бы иметь возможность изменять script, я больше заинтересован в том, чтобы посмотреть на документы PHP и научиться писать их самостоятельно. Тем не менее, если есть какие-либо существующие скрипты, учебные пособия и многое другое, сообщите мне.
Вы можете использовать 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 !== '.' && $file !== '..') {
$files[] = $file;
}
}
var_dump($files);
?>
Вы также можете использовать FilesystemIterator
. Он требует еще меньше кода, чем DirectoryIterator
, и автоматически удаляет .
и ..
.
// Let traverse the images directory
$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
$files = glob('folder/*.{jpg,png,gif}', GLOB_BRACE);
foreach($files as $file)
{
//do your work here
}
Вы можете использовать этот код для циклического перебора каталога:
$path = "/home/myhome";
$rdi = new RecursiveDirectoryIterator($path, RecursiveDirectoryIterator::KEY_AS_PATHNAME);
foreach (new RecursiveIteratorIterator($rdi, RecursiveIteratorIterator::SELF_FIRST) as $file => $info) {
echo $file."\n";
}
glob() содержит положения для сортировки и сопоставления шаблонов. Поскольку возвращаемое значение представляет собой массив, вы можете сделать больше всего, что вам нужно.
Для полноты (поскольку эта страница, похоже, требует большого трафика), давайте не забывать о старой доброй функции 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);