1

在 Windows 中,我打开一个目录,读取文件,并为每个文件运行 stat 以确定大小等。

问题是,当我在文件夹 SHORTCUT 上运行 stat 时,它会以 FOLDER 的形式返回,而我在位掩码中看不到任何mode可能表明这一点的地方。. 中的所有文件夹快捷方式都是如此c:\Documents and Settings\myUserName\

对于这些快捷方式,is_filereturns falseis_dirreturnstrueis_link在 XP 中不受支持。

这是我的代码的摘录(它已被修剪,因此可能存在错误):

if(($h=@opendir($root))!==false){
    while (false !== ($file = readdir($h))){
        if(!($file=="." || $file=="..")){
            if( $stat = @lstat($root . $file) ){
                $ary[0] = $file;
                $ary[1] = $root;
                $ary[2] = Date("m/d/y H:i:s", $stat['mtime']);
                if($stat['mode'] & 040000){
                    $ary[3]="dir";
                    $ary[4]=0;
                }else{
                    $ary[3] ="file";
                    $ary[4] = $stat['size'];
                }
                echo(json_encode($ary));
            }
        }
    }
}

对此的解决方法将不胜感激......

编辑:Winterblood 的解决方案几乎奏效了

首先-我的错-这是一台win7机器。

感谢 Winterblood 的快速周转 - 这适用于几个快捷方式,PHP 手册就是这么说的......但是,

c:\users\myUserName\AppData\Local\Application 数据

(和其他人)仍然作为目录返回,而 winSCP 正确地将它们视为快捷方式。事实上,“模式”是040777,与许多真实文件夹完全相同。

还有其他建议吗?

4

1 回答 1

1

PHP 的stat()函数“遵循”快捷方式/符号链接,报告链接文件/文件夹的详细信息,而不是实际链接本身。

要获取有关链接本身的统计详细信息,请使用lstat().

有关lstat 的 PHP 文档中的更多信息。

于 2013-05-09T23:30:27.303 回答