有谁能告诉我这段代码有什么问题?它应该显示../files/
中的所有文件夹,但它返回一个空列表。这是代码:
<?php
$upload_dir = chdir("./files/" . $userid);
$dirs = glob($upload_dir, GLOB_ONLYDIR);
foreach($dirs as $val){
echo '<option value="'.$val.'">'.$val."</option>\n";
}
?>
答案 0 :(得分:2)
chdir()
会返回true
或false
,具体取决于更改目录是否有效。因此,您基本上会尝试查找名为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.';
}
?>
答案 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";
}
?>
这样做的好处是不会更改当前的工作目录。理想情况下,我会使用绝对路径而不是那里的相对路径。