2013-05-09 7 views
1

В окнах, я открываю реж, читать файлы, и для каждого файла, запустите стат, чтобы определить размер и т.д.PHP lstat не различает ярлыки в окнах

Проблема заключается в том, что, когда я бегу stat в папке SHORTCUT, она возвращается как ПАПКА, и я не вижу нигде в битовой маске mode, которая могла бы указать это. Это верно для всех ярлыков папки в c:\Documents and Settings\myUserName\.

Для этих ярлыков, is_file возвращает false, is_dir возвращает true и is_link не поддерживается в XP.

Вот выдержка из моего кода (она была урезана, так что могут быть ошибки):

if(([email protected]($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 Data \ Application

(и другие) все еще возвращаются в качестве каталогов, в то время как winSCP правильно воспринимает их как ярлыки. По сути, «режим» - 040777, что точно так же, как и многие реальные папки.

Любые другие предложения?

ответ

1

PHP stat() Функция «следует» ярлыкам/символическим ссылкам, сообщает подробности связанного файла/папки, а не собственно ссылку.

Для получения подробной информации о самой ссылке используйте lstat().

Дополнительная информация в the PHP documentation on lstat.

+0

Горячий проклятый - я набрал маленький-ol '' l в свой код и услышал колокола ангелов. – alfadog67

+0

Почти сделал это ... Я скорректировал свое оригинальное сообщение, чтобы отразить текущую ситуацию. – alfadog67

+0

Насколько я знаю,% LocalAppData% была реальной папкой. Если lstat сообщает, что это настоящая папка, но WinSCP сообщает об этом в качестве ссылки, я бы стал больше подвергать сомнению программное обеспечение, а не язык. –