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

报告相同问题?

悬赏问题

  • ¥188 需要修改一个工具,懂得汇编的人来。
  • ¥15 livecharts wpf piechart 属性
  • ¥20 数学建模,尽量用matlab回答,论文格式
  • ¥15 昨天挂载了一下u盘,然后拔了
  • ¥30 win from 窗口最大最小化,控件放大缩小,闪烁问题
  • ¥20 易康econgnition精度验证
  • ¥15 msix packaging tool打包问题
  • ¥28 微信小程序开发页面布局没问题,真机调试的时候页面布局就乱了
  • ¥15 python的qt5界面
  • ¥15 无线电能传输系统MATLAB仿真问题