2013-05-09 73 views
1

區分快捷方式在Windows中,我打開一個目錄,讀取文件,併爲每個文件,運行統計的大小來確定,等PHP LSTAT命令無法在Windows

的問題是,當我運行統計在文件夾SHORTCUT上,它以FOLDER的形式返回,並且我看不到mode位掩碼中可能表明這一點的任何地方。這適用於c:\Documents and Settings\myUserName\中的所有文件夾快捷方式。

對於這些快捷鍵,is_file返回falseis_dir回報trueis_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)); 
      } 
     } 
    } 
} 

針對此變通辦法將不勝感激...

編輯:Winterblood的解決方案几乎工作

首先 - 我的壞 - 它是一個win7機器。

感謝Winterblood的快速週轉 - 這工作了幾個快捷鍵,和PHP手冊只是說,...但是,

C:\用戶\ MyUserName輸入\應用程序數據\本地\應用數據

(和其他)仍然作爲目錄回來,而winSCP正確地將它們視爲快捷方式。事實上,'模式'是040777,與許多實際文件夾完全一樣。

其他建議?

回答

1

PHP的stat()函數「跟隨」快捷方式/符號鏈接,報告鏈接文件/文件夾的詳細信息,而不是實際的鏈接本身。

要獲取有關鏈接本身的統計信息,請使用lstat()

更多的信息在the PHP documentation on lstat

+0

該死的 - 我在我的代碼中輸入了一個小小的'l',並聽到了天使的鐘聲。 – alfadog67 2013-05-09 23:58:50

+0

差不多做到了......我調整了我原來的帖子,以反映當前的情況。 – alfadog67 2013-05-10 16:02:15

+0

據我所知,%LocalAppData%是一個真正的文件夾。如果lstat報告它是一個真實的文件夾,但WinSCP報告它是一個鏈接,我會更加質疑軟件,而不是語言。 – 2013-05-11 01:54:52