Windows では、ディレクトリを開き、ファイルを読み取り、各ファイルに対して stat を実行してサイズなどを決定します。
問題は、フォルダー SHORTCUT で stat を実行すると、フォルダーとして返され、mode
これを示す可能性のあるビットマスクのどこにも表示されないことです。これは、 のすべてのフォルダ ショートカットに当てはまりますc:\Documents and Settings\myUserName\
。
これらのショートカット、is_file
return false
、is_dir
returntrue
および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));
}
}
}
}
これに対する回避策をいただければ幸いです...
編集:Winterbloodのソリューションはほとんど機能しました
まず、悪いことに、これは win7 マシンです。
迅速なターンアラウンドを提供してくれた Winterblood に感謝します。これはいくつかのショートカットで機能し、PHP のマニュアルにはそのように書かれています...ただし、
c:\users\myUserName\AppData\Local\Application Data
(およびその他) はまだディレクトリとして戻ってきますが、winSCP はそれらをショートカットとして正しく認識します。実際のところ、「モード」は 040777 であり、これは多くの実際のフォルダーとまったく同じです。
他の提案はありますか?