0

我正在尝试使用此代码读取并显示目录中的所有文件。它适用于与脚本位于同一目录中的文件。但是当我尝试在文件夹 (files/) 中显示文件时,它给我带来了问题。

我尝试将directoy 变量设置为许多不同的东西。像...
文件/
文件
/文件/
等...似乎没有任何效果。有谁知道为什么?

<?php
$dhandleFiles = opendir('files/');
$files = array();

if ($dhandleFiles) {
    while (false !== ($fname = readdir($dhandleFiles))) {
        if (is_file($fname) && ($fname != 'list.php') && ($fname != 'error.php') && ($fname != 'index.php')) {
            $files[] = (is_dir("./$fname")) ? "{$fname}" : $fname;
        }
    }
    closedir($dhandleFiles);
}

echo "Files";
echo "<ul>";
foreach ($files as $fname) {
    echo "<li><a href='{$fname}'>{$fname}</a></li>";
}
echo "</ul>";
?>
4

4 回答 4

2

您没有在数组中包含完整路径:

while($fname = readdir($dhandleFiles)) {
    $files[] = 'files/' . $fname;
               ^^^^^^^^---must include actual path
}

记住 readdir()返回文件名,没有路径信息。

于 2013-10-24T18:08:59.780 回答
1

如何使用 glob 函数。

<?php
define('MYBASEPATH' , 'files/');
foreach (glob(MYBASEPATH . '*.php') as $fname) {
    if($fname != 'list.php' && $fname != 'error.php' && $fname != 'index.php') {
        $files[] = $fname;
    }
}
?>

在此处阅读有关获取目录中所有文件的更多信息

于 2013-10-24T18:11:53.320 回答
1

这将从子目录中读取并打印文件名:

$d = dir("myfiles");
while (false !== ($entry = $d->read())) {
  if ($entry != ".") {
    if ($entry != "..") {
        print"$entry";       
    }
  }
}
$d->close();
于 2014-03-10T17:57:26.950 回答
1

这应该会有所帮助 - 也可以查看SplFileInfo

<?php
class ExcludedFilesFilter extends FilterIterator {
    protected
        $excluded = array(
            'list.php',
            'error.php',
            'index.php',
        );
    public function accept() {
        $isFile     = $this->current()->isFile();
        $isExcluded = in_array($this->current(), $this->excluded);

        return $isFile && ! $isExcluded;
    }
}

$dir = new DirectoryIterator(realpath('.'));

foreach (new ExcludedFilesFilter($dir) as $file) {
    printf("%s\n", $file->getRealpath());
}
于 2013-10-24T18:18:09.807 回答