在windows中,我打开一个dir,读取文件,并对每个文件运行stat来确定大小等。
问题是,当我在文件夹快捷方式上运行stat时,它作为一个文件夹返回,并且在mode位掩码中看不到任何可能表明这一点的地方。对于c:\Documents and Settings\myUserName\中的所有文件夹快捷方式都是这样。
对于这些快捷方式,is_file返回false,is_dir返回true,XP不支持is_link。
下面是我的代码的摘录(它已经被删减了,所以可能有bug):
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));
}
}
}
}有个解决办法会很感激的..。
编辑:温特血的解决方案几乎奏效了
首先-我的错-这是一台win7机器。
感谢温特血的快速扭转-这对几个快捷方式有效,PHP手册上说。然而,
C:\user\myUserName\AppData\Local\Application Data
(以及其他的)仍然作为目录返回,而winSCP正确地将它们视为快捷方式。事实上,“模式”是040777,与许多真正的文件夹完全相同。
还有其他建议吗?
发布于 2013-05-09 23:30:27
PHP的stat()函数“遵循”快捷方式/符号链接,报告链接文件/文件夹的详细信息,而不是实际链接本身。
要获取链接本身的stat详细信息,请使用lstat()。
关于lstat的PHP文档中有更多信息。
https://stackoverflow.com/questions/16472776
复制相似问题