PHP脚本循环遍历目录中的所有文件?

Mos*_*she 123 php file

我正在寻找一个循环遍历目录中所有文件的PHP脚本,因此我可以使用文件名进行操作,例如格式化,打印或将其添加到链接中.我希望能够按名称,类型或创建/添加/修改日期对文件进行排序.(想想花哨的目录"索引".)我还希望能够在文件列表中添加排除项,例如脚本本身或其他"系统"文件.(就像..."目录"一样.)

由于我希望能够修改脚本,我更感兴趣的是查看PHP文档并学习如何自己编写.也就是说,如果有任何现有的脚本,教程和诸如此类的东西,请告诉我.

Mor*_*dur 229

您可以使用DirectoryIterator.php手册示例:

<?php
$dir = new DirectoryIterator(dirname(__FILE__));
foreach ($dir as $fileinfo) {
    if (!$fileinfo->isDot()) {
        var_dump($fileinfo->getFilename());
    }
}
?>
Run Code Online (Sandbox Code Playgroud)

  • 注意[2]:确保你理解上面的``dirname()``函数将获得你放在那里的任何路径的父文件夹.在我的例子中,我假设dirname是目录名称/路径的包装器,因此不需要它. (4认同)
  • 注意:许多服务器没有安装SPL,因此您将无法使用DirectoryIterator类(请参阅下面的替代帖子).如果可以,请使用此功能! (3认同)
  • 如果你需要像 `/home/examples/banana.jpg` 这样的完整路径,请使用 `$fileinfo-&gt;getPathname()` (2认同)

Nex*_*Rex 41

如果您无权访问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);
}
?>
Run Code Online (Sandbox Code Playgroud)

  • 许多遗留应用程序使用PHP 4,它无法访问DirectoryIterator. (11认同)
  • 你能说出一个你无法访问它的情况吗? (4认同)
  • Dave...不,它正在匹配点,如果在 PHP 中不匹配,则不会继续。寻找 == 和 === 之间的区别。 (2认同)

小智 20

使用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);
?>
Run Code Online (Sandbox Code Playgroud)


Jul*_*ian 11

你也可以利用FilesystemIterator.它需要更少的代码然后DirectoryIterator自动删除....

// Let's 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)
Run Code Online (Sandbox Code Playgroud)

链接:http: //php.net/manual/en/class.filesystemiterator.php


Gam*_*ing 6

您可以使用此代码递归遍历目录:

$path = "/home/myhome";
$rdi = new RecursiveDirectoryIterator($path, RecursiveDirectoryIterator::KEY_AS_PATHNAME);
foreach (new RecursiveIteratorIterator($rdi, RecursiveIteratorIterator::SELF_FIRST) as $file => $info) {
    echo $file."\n";
}
Run Code Online (Sandbox Code Playgroud)