列出目录文件时如何避免使用父目录链接?

时间:2012-03-14 07:42:55

标签: php

我使用以下代码显示文件夹的内容说图像(目录和文件夹中的文件)

<?php

$dir="images/"; // Directory where files are stored

if ($dir_list = opendir($dir))
{
while(($filename = readdir($dir_list)) !== false)
{
    $newvar1="$dir$filename";// For Hyperlink Path
?>
<p><a href="<?php echo $newvar1; ?>"><?php echo $filename;
?></a></p>
<?php
}
closedir($dir_list);
}

?>

但PHP文件显示带有两个额外链接的输出

  1. 指向文件夹'images'和
  2. 的链接
  3. 指向“主页”的链接。
  4. 我尝试使用“filesize”函数过滤这两个链接,但收到了一些错误。

    我该如何解决这个问题?

3 个答案:

答案 0 :(得分:2)

使用支票跳过当前目录和父目录。

while(...) {
   if($filename == ".." || $filename == ".") continue;
...
}

答案 1 :(得分:1)

将您的代码修改为以下内容:

while(($filename = readdir($dir_list)) !== false)
{
    if($filename != '.' || $filename != '..')  // This part to check and ignore
        $newvar1="$dir$filename";// For Hyperlink Path
    else
        continue;   //while loop will no further be processed!
//...
}

答案 2 :(得分:0)

这是一个更深入的答案,我非常厌倦了这些事情......这绝对是一段​​可怕的代码,即使Php允许这样可怕的事情。< / p>

这样的东西更容易阅读,更易于维护,更容易调试:

<?php

$tab = array();
$dir="images/"; // Directory to parse
if ($dir_list = opendir($dir))
{
    while(($filename = readdir($dir_list)) !== false)
    {
        if($filename != ".." && $filename != ".")
        {
            $tab[$filename] = $dir.$filename; // Hyperlink Path
        }
    }
    closedir($dir_list);
}

/* Display separated from logic */
foreach ($tab as $filename => $hyperlink)
{
    echo '<p><a href="'.$hyperlink.'">'.$filename.'</a></p>';
}

?>

更紧凑,但不太容易阅读:

<?php

$tab = array();
$dir="images/"; // Directory to parse
if ($dir_list = opendir($dir)) {
    while(($filename = readdir($dir_list)) !== false) {
        if($filename != ".." && $filename != ".") {
            $tab[$filename] = $dir.$filename; // Hyperlink Path
        }
    }
    closedir($dir_list);
}

/* Display separated from logic */
foreach ($tab as $filename => $hyperlink) {
    echo '<p><a href="'.$hyperlink.'">'.$filename.'</a></p>';
}

?>

有些人(包括我的老教师)告诉“如果有一行代码,请不要使用{}”(我非常不同意,因为它可能会导致以后的错误)但这里是“优化”版本:

<?php

$tab = array();
$dir="images/";
if ($dir_list = opendir($dir)) {
    while(($filename = readdir($dir_list)) !== false)
        if($filename != ".." && $filename != ".")
            $tab[$filename] = $dir.$filename; // Hyperlink Path
    closedir($dir_list);
}

foreach ($tab as $filename => $hyperlink)
    echo '<p><a href="'.$hyperlink.'">'.$filename.'</a></p>';

?>