2014-02-16 44 views
0

我想使用PHP在父级目录级别制作一个动态菜单。我可以用下面的代码获得子目录:如何使用PHP列出父目录级别的目录?

<?php 
    if ($handle = opendir('.')) 
    { 
     while (false !== ($file = readdir($handle))) 
     { 
      if ($file != "." && $file != "..") 
      { 
       if(is_dir($file)) 
       { 
        echo '<a href="./' . $file . '">' . $file . '</a><br/>'; 
       } 
      } 
     } 
     closedir($handle); 
    } 
?> 

当我改变执行opendir到(“..‘)或(’...”)似乎没有回来。我愿做这样的事情:

/
|-A 
| |-1 
|-B 
| |-1 
| |-2 
| |-3 
| |-a 
| |-b 
|-C 

在哪里,如果我是在/ B/2页下,PHP的输出将表明父目录级别列表将有联系的A,B和C而不是象'..'那样的象征。如果我在/ A/1中,相同的代码将显示相同的父级别目录。如果我在/ B/3/a中,代码将列出1,2和3.这可能吗?如果是的话,我将如何修改代码来完成这个?

+0

它可能是一个权限问题; Web服务器运行的用户需要具有对目录的读取访问权限 –

回答

0

is_dir()这样的函数的文件名参数是相对于进程的当前目录进行解释的,该目录与您提供给opendir()的目录不同。您需要预先设置的目录:

if (is_dir("../$file")) { 
0

您将需要像这样链接:

<a href="../A/1">A</a> 
<a href="../B/1">A</a> 
<a href="../C/1">A</a> 
0

事实证明,就是正在测试的问题,看看我有一个目录中的行。请注意,序列以

if (is_dir('../')) 
{ 

} 

答案看起来像这样。

<?php 
if (is_dir('../')) 
{ 
    if ($dirhandle = opendir($dir)) 
    { 
    while (($directory = readdir($dirhandle)) !== false) 
    { 
     if ($directory != "." && 
      $directory != ".." && 
      $directory != ".DS_Store" && 
      $directory != ".metadata" 
      ) 
     { 
      echo '<a href="../' . $directory . '">'. $directory . '</a><br>' . "\n";  
     } 
    } 
    closedir($dh); 
    } 
} 
?> 

然后可以修改的东西你做的列表希望有例如上市index.php文件。