在下拉框中列出子目录

时间:2013-01-11 18:24:38

标签: php drop-down-menu directory subdirectory

有谁能告诉我这段代码有什么问题?它应该显示../files/中的所有文件夹,但它返回一个空列表。这是代码:

<?php
    $upload_dir  = chdir("./files/" . $userid);
    $dirs = glob($upload_dir, GLOB_ONLYDIR);
    foreach($dirs as $val){
       echo '<option value="'.$val.'">'.$val."</option>\n";
    }       
?>

2 个答案:

答案 0 :(得分:2)

chdir()会返回truefalse,具体取决于更改目录是否有效。因此,您基本上会尝试查找名为10的所有文件。如果有任何明确定义的行为。

试试这样:

<?php
    if (chdir("./files/" . $userid)) {
       $dirs = glob('*', GLOB_ONLYDIR);
       foreach($dirs as $val){
          echo '<option value="'.$val.'">'.$val."</option>\n";
       }        
    } else {
       echo 'Changing directory failed.';
    }
?>

答案 1 :(得分:0)

您已将$upload_dir设置为chdir的返回值,该值为TRUE或FALSE,然后在设置$ dirs时尝试将其用作glob的参数。

glob的第一个参数应该是一个表示模式的字符串。在您的情况下,您可能希望*列出所有内容(而不是您传入的TRUE或FALSE)。将glob的第一个参数想象成你在Windows上dir或Linux中的ls,所以在这种情况下/files/userid/*或类似的东西。

我会做这样的事情:

<?php
    $pattern = "./files/" . $userid . '/*';
    $dirs = glob($pattern, GLOB_ONLYDIR);
    foreach($dirs as $val){
       echo '<option value="'.$val.'">'.$val."</option>\n";
    }       
?>

这样做的好处是不会更改当前的工作目录。理想情况下,我会使用绝对路径而不是那里的相对路径。