PHP readdir()返回“。”和“..”条目

时间:2009-10-06 14:15:33

标签: php linux readdir

我正在为我公司编写一个简单的网络报告系统。我为index.php编写了一个脚本,该脚本获取“reports”目录中的文件列表,并自动创建指向该报告的链接。它工作正常,但我的问题是readdir()不断返回。和..目录指针以及目录的内容。是否有任何方法可以阻止此其他循环通过返回的数组并手动剥离它们?

以下是好奇的相关代码:

//Open the "reports" directory
$reportDir = opendir('reports');

//Loop through each file
while (false !== ($report = readdir($reportDir)))
{
  //Convert the filename to a proper title format
  $reportTitle = str_replace(array('_', '.php'), array(' ', ''), $report);
  $reportTitle = strtolower($reportTitle);
  $reportTitle = ucwords($reportTitle);

  //Output link
  echo "<a href=\"viewreport.php?" . $report . "\">$reportTitle</a><br />";
}

//Close the directory
closedir($reportDir);

5 个答案:

答案 0 :(得分:15)

在上面的代码中,您可以在while循环中作为第一行追加:

if ($report == '.' or $report == '..') continue;

答案 1 :(得分:4)

array_diff(scandir($reportDir), array('.', '..'))

甚至更好:

foreach(glob($dir.'*.php') as $file) {
    # do your thing
}

答案 2 :(得分:2)

不,这些文件属于某个目录,因此readdir应该返回它们。我认为其他所有行为都会被打破。

无论如何,只是跳过它们:

while (false !== ($report = readdir($reportDir)))
{
  if (($report == ".") || ($report == ".."))
  {
     continue;
  }
  ...
}

答案 3 :(得分:1)

我不知道另一种方式,因为“。”和“..”也是正确的目录。无论如何,当您正在循环以形成正确的报告网址时,您可能会放入一个忽略if.的{​​{1}}进行进一步处理。{/ p>

修改
Paul Lammertsma比我快一点。这就是你想要的解决方案; - )

答案 4 :(得分:0)

我想检查“。”和“ ..”目录以及根据我在该目录中存储的内容而可能无效的所有文件,所以我使用了:

while (false !== ($report = readdir($reportDir)))
{
    if (strlen($report) < 8) continue;
    // do processing
}