2011-08-11 22 views
1

<ul>リストを作成するには、メインフォルダの各ディレクトリに<li>というリストがあります。 は、ここに私のコードです:is_dir()は、PHPでディレクトリをスキャン中に失敗しました

<?php 

$dir = opendir(getEnv("DOCUMENT_ROOT") . "/folder"); 

while(($file = readdir($dir)) !== false){ 
    if(is_dir($file) && $file !== "." && $file !== ".."){ 
    echo "<li>" . $file . "</li>"; 
    } 
} 

closedir($dir); 

?> 

/ホーム/例/フォルダに2つのディレクトリがありますが、(確かに彼らは!)で

場合I「echo」のファイルフォルダとしてそこに認識されません一方、それらは印刷されます(スクリプトのためにはうまくいきません。 私が "filetype"にしようとすると、lstat failedエラーがスローされます。私はインターネット上でその意味を調べました。

答えて

4

あなたの問題は、 "folder"ディレクトリ内に2つのディレクトリ(aとb)を持つことができます。読み込みはファイル名として "a"と "b"を取得し、is_dirは絶対パスファイル名または相対ファイル名を受け取ります。

  1. ファイル名へのフルパスをis_dir関数に渡します(コード例を参照)。
  2. 相対パスを渡します(スクリプトの配置場所によって異なります)。 $ファイルの値が!==は `false`と比較される前
if(is_dir($dir . "/" . $file) && $file !== "." && $file !== ".."){ ...... 
+0

投稿する、これは私には、感謝の多くは、@ fdaines – user544262772

0

試してみてください。

while($file = readdir($dir)) { 
    if (...) { } 
} 

!== false部分は必要ありません。 readdirが最後に達した場合は、falseを返し、ループは自動的に終了します。

$file gets the value of (readdir($file) is not false) 

例えば:あなたのバージョンでは、として解析されていますreaddirの戻り値ではなく、ブール結果readdir($file) !== falseを割り当てています。あなたのループ・セットアップの

PHPのパースツリーは次のようになり、拡大:

$bool = (readdir($dir) !== false); 
$file = $bool; 

をいずれか、これを修正削除するには=!operator precedenceについては、以下の私のコメントに拡大する


=部分を完全に偽ったり、余分な角かっこで独自の優先順位を設定してください:

+0

私は自分の条件に何か問題が表示されていないが、割り当てが処理されます。とにかく '!== false'は、コードをもっと冗長にするだけの方法です。そして、これは私のトラブルを解決するものではありません。なぜこれを回答として掲示していますか? – user544262772

+0

これを読んでください:http://php.net/manual/en/language.operators.precedence.php '='はPHPで '==='や '!=='より優先度が低いので、あなたの!==比較が最初に行われています。 –

+0

私は既に知っている、余分な括弧は私のコードに表示されますあなたはそれらを見ていないのですか? – user544262772

関連する問題