PHP5.6-函数为_dir()权限问题

PHP5.6-函数为_dir()权限问题,php,Php,我尝试递归扫描文件夹,并将找到的每个*.h文件的路径存储到一个数组中 function findfiles($input, &$array){ $dir = scandir($input); foreach($dir as $file) { if ($file !== "." && $file !== "..") { if (is_file(realpath($file)) &

我尝试递归扫描文件夹,并将找到的每个*.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”和“/atest/FolderInside”返回FALSE,即使我设置了所有权限

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

为什么?

问题是调用
is_file()
is_dir()
时不能只使用
$file
,因为它会在
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);

问题是,在调用
is_file()
is_dir()
时,不能只使用
$file
,因为它会在
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);

我修改了错误的代码行。实际上,我使用的是realpath($file),它返回文件的完整路径。请你现在看一下,告诉我情况是否还不好?我想我不必使用你的方法,但非常感谢你的回答。
realpath
在你的代码中没有用处,因为
scandir
只返回文件名列表,没有路径。而且
realpath
无法确定
文件.h
来自哪个目录。。。因此,如果它不在当前目录中,它将返回
false
。我修改了错误的代码行。实际上,我使用的是realpath($file),它返回文件的完整路径。请你现在看一下,告诉我情况是否还不好?我想我不必使用你的方法,但非常感谢你的回答。
realpath
在你的代码中没有用处,因为
scandir
只返回文件名列表,没有路径。而且
realpath
无法确定
文件.h
来自哪个目录。。。因此,如果它不在当前目录中,它将返回
false