1

Windows では、ディレクトリを開き、ファイルを読み取り、各ファイルに対して stat を実行してサイズなどを決定します。

問題は、フォルダー SHORTCUT で stat を実行すると、フォルダーとして返され、modeこれを示す可能性のあるビットマスクのどこにも表示されないことです。これは、 のすべてのフォルダ ショートカットに当てはまりますc:\Documents and Settings\myUserName\

これらのショートカット、is_filereturn falseis_dirreturntrueおよびis_linkXP ではサポートされていません。

これが私のコードからの抜粋です(トリミングされているため、バグがある可能性があります):

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 Data

(およびその他) はまだディレクトリとして戻ってきますが、winSCP はそれらをショートカットとして正しく認識します。実際のところ、「モード」は 040777 であり、これは多くの実際のフォルダーとまったく同じです。

他の提案はありますか?

4

1 に答える 1

1

PHP のstat()関数は、ショートカット/シンボリック リンクを「たどり」、実際のリンク自体ではなく、リンクされたファイル/フォルダーの詳細を報告します。

リンク自体の統計の詳細を取得するには、 を使用しますlstat()

詳細については、 lstat に関する PHP ドキュメントを参照してください。

于 2013-05-09T23:30:27.303 に答える