PHP 5.6 - 函数is_dir()权限问题

时间:2017-02-14 18:49:03

标签: php

我尝试递归扫描文件夹并将找到的每个* .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

请问为什么?

1 个答案:

答案 0 :(得分:0)

问题是,在调用$fileis_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);