我正在尝试创建一个函数,该函数扫描文件夹中的子文件夹,然后返回一个包含这些文件夹名称的数字数组。
这是我用来测试的代码。一旦我让它打印出文件夹名称,而不仅仅是“。和"..“现在和上面的文件夹都会很好,我可以完成功能。
<?php
function super_l_getthemes($dir="themes")
{
if ($handle = opendir($dir)) {
echo "Handle: {$handle}\n";
echo "Files:\n";
while (false !== ($file = readdir($handle))) {
echo "{$file}<br>";
}
closedir($handle);
}
?>
上面的代码运行良好,可以打印出文件夹的所有内容:文件、子文件夹和“。和"..“
但如果我换成:
while (false !== ($file = readdir($handle))) {
echo "{$file}<br>";
}
通过以下方式:
while (false !== ($file = readdir($handle))) {
if(file_exists($file) && is_dir($file)){echo "{$file}";}
}
该函数仅打印“。和"..“,而不是我想要打印的两个文件夹名称。
任何帮助都是非常感谢的。
发布于 2010-06-08 22:10:34
您必须提供file_exists
的绝对路径,否则它将在当前执行路径中查找该路径。
while (false !== ($file = readdir($handle))) {
$file_path = $dir . DIRECTORY_SEPARATOR . $file;
if (file_exists($file_path) && is_dir($file_path)) {
echo "{$file}";
}
}
发布于 2010-06-08 22:16:07
readdir
的问题是它只读取目录中命名条目的字符串。
例如,如果您的文件"foo“在目录"/path/ to /files/”中,当在"/path/to/files/“上使用readdir
时,您最终会得到字符串"foo”。
通常情况下,如果它与脚本的当前工作目录在同一目录中,这不是问题,但是,由于您是从任意目录读取的,所以当您尝试检查条目(文件、目录等)时,您将对裸字符串"foo“调用is_dir
。
我会尝试在您使用readdir
提取的名称前面加上文件的路径。
if ($handle = opendir($dir)) {
echo "Handle: {$handle}\n";
echo "Files:\n";
while ($file = readdir($handle)) {
/*** make $file into an absolute path ***/
$absolute_path = $dir . '/' . $file;
/*** NOW try stat'ing it ***/
if (is_dir($absolute_path)) {
/* it's a directory; do stuff */
}
}
closedir($handle);
}
发布于 2010-06-08 22:10:44
您需要使用:
while (false !== ($file = readdir($handle))) {
if(file_exists($dir.'/'.$file) && is_dir($dir.'/'.$file)){echo "{$file}";}
}
请参阅http://php.net/readdir
https://stackoverflow.com/questions/2997991
复制相似问题