PHP脚本循环遍历目录中的所有文件?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了PHP脚本循环遍历目录中的所有文件?相关的知识,希望对你有一定的参考价值。
我正在寻找一个循环遍历目录中所有文件的php脚本,因此我可以使用文件名进行操作,例如格式化,打印或将其添加到链接中。我希望能够按名称,类型或创建/添加/修改日期对文件进行排序。 (想想花哨的目录“索引”。)我还希望能够将排除项添加到文件列表中,例如脚本本身或其他“系统”文件。 (像.
和..
“目录”。)
由于我希望能够修改脚本,我更感兴趣的是查看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) continue;
if ('..' === $file) continue;
$files[] = $file;
}
var_dump($files);
?>
另一答案
您也可以使用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
另一答案
您可以使用此代码以递归方式遍历目录:
$path = "/home/myhome";
$rdi = new RecursiveDirectoryIterator($path, RecursiveDirectoryIterator::KEY_AS_PATHNAME);
foreach (new RecursiveIteratorIterator($rdi, RecursiveIteratorIterator::SELF_FIRST) as $file => $info) {
echo $file."
";
}
另一答案
glob()有排序和模式匹配的条款。由于返回值是一个数组,因此您可以执行所需的大部分操作。
另一答案
为了完整性(因为这似乎是一个高流量页面),让我们不要忘记好老dir()
function:
$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);
以上是关于PHP脚本循环遍历目录中的所有文件?的主要内容,如果未能解决你的问题,请参考以下文章
php 循环遍历文件夹下面的所有目录及文件并且每个文件都写入一句话