我尝试递归扫描文件夹并将找到的每个* .h文件路径存储到一个数组中。
function findfiles($input, &$array){
$dir = scandir($input);
foreach($dir as $file)
{
if ($file !== "." && $file !== "..")
{
if (is_file(realpath($file)) && substr($file, -2) === ".h")
{
array_push($array, realpath($file));
}
if (is_dir(realpath($file)) //I'M EVEN USING ABSOLUTE PATH
{
findfiles(realpath($file), $array);
}
}
}
}
$input="./"
$array = array();
findfiles($input, $array);
我想这应该可以,但函数is_dir()为目录" ./ atest / AA"返回FALSE。和" ./ atest / FolderInside"即使我已设置所有权限。
drwxrwxrwx 2 root root 0 úno 14 18:46 AA
drwxrwxrwx 2 root root 0 úno 14 15:12 FolderInside
并且可以与其他文件夹一起使用" atest"和" test1"即使他们拥有相同的权限设置。
drwxrwxrwx 2 root root 0 úno 14 18:46 atest
drwxrwxrwx 2 root root 0 úno 14 15:39 test1
请问为什么?
答案 0 :(得分:0)
问题是,在调用$file
或is_file()
时,您无法仅使用is_dir()
,因为它会搜索include_path
中的文件(可能也会在当前目录中)。正确的方法是使用路径名前缀文件名:
function findfiles($input, &$array){
if (substr($input, -1) !== '/')
$input .= '/';
$dir = scandir($input);
foreach($dir as $file)
{
if ($file !== "." && $file !== "..")
{
if (is_file($input.$file) && substr($input.$file, -2) === ".h")
{
array_push($array, realpath($input.$file));
}
if (is_dir($input.$file))
{
findfiles($input.$file, $array);
}
}
}
}
$input="./";
$array = [];
findfiles($input, $array);