1

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

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

2 回答 2

2

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

试试这样:

<?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.';
    }
?>
于 2013-01-11T18:29:08.147 回答
0

你已经$upload_dir设置了返回 from chdir,这将是 TRUE 或 FALSE,然后在设置 $dirs 时尝试将其用作 glob 的参数。

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

我会做这样的事情:

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

这具有不更改当前工作目录的优点。理想情况下,我会使用绝对路径而不是那里的相对路径。

于 2013-01-11T18:29:55.647 回答