douyuan5600 2017-02-14 18:49
浏览 176
已采纳

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

I'm trying to scan folders recursively and store every *.h file found's path into an array.

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);

I guess this should work but function is_dir() returns FALSE for directories "./atest/AA" and "./atest/FolderInside" even if I have all permissions set.

drwxrwxrwx 2 root root 0 úno 14 18:46 AA
drwxrwxrwx 2 root root 0 úno 14 15:12 FolderInside

and works great with other folders "atest" and "test1" even they have the same permissions set.

drwxrwxrwx 2 root root    0 úno 14 18:46 atest
drwxrwxrwx 2 root root    0 úno 14 15:39 test1

Please why?

  • 写回答

1条回答 默认 最新

  • douyuai8994 2017-02-14 19:13
    关注

    The thing is you cannot use just $file when calling is_file() or is_dir(), because it would search the file in include_path (possibly also in current directory). The correct way would be to prepend filename with pathname:

    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);
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥20 求一个html代码,有偿
  • ¥100 关于使用MATLAB中copularnd函数的问题
  • ¥20 在虚拟机的pycharm上
  • ¥15 jupyterthemes 设置完毕后没有效果
  • ¥15 matlab图像高斯低通滤波
  • ¥15 针对曲面部件的制孔路径规划,大家有什么思路吗
  • ¥15 钢筋实图交点识别,机器视觉代码
  • ¥15 如何在Linux系统中,但是在window系统上idea里面可以正常运行?(相关搜索:jar包)
  • ¥50 400g qsfp 光模块iphy方案
  • ¥15 两块ADC0804用proteus仿真时,出现异常