В Windows я открываю каталог, читаю файлы и для каждого файла запускаю stat, чтобы определить размер и т. д.
Проблема в том, что когда я запускаю stat для папки SHORTCUT, она возвращается как ПАПКА, и я не вижу ничего в битовой маске mode
, что могло бы указывать на это. Это верно для всех ярлыков папок в c:\Documents and Settings\myUserName\
.
Для этих сочетаний клавиш is_file
возвращает false
, is_dir
возвращает true
, а is_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));
}
}
}
}
Обходной путь для этого будет оценен ...
EDIT: решение Winterblood почти сработало
Прежде всего - мой плохой - это машина с Win7.
Спасибо Winterblood за быстрое решение - это сработало для нескольких ярлыков, и в руководстве по PHP говорится именно об этом... Однако,
c:\users\myUserName\AppData\Local\Данные приложения
(и другие) по-прежнему возвращаются как каталоги, в то время как winSCP правильно видит их как ярлыки. На самом деле «режим» — 040777, что точно такое же, как и у многих реальных папок.
Любые другие предложения?