4

私は自分の会社の簡単な Web レポート システムをコーディングしています。「レポート」ディレクトリ内のファイルのリストを取得し、そのレポートへのリンクを自動的に作成する index.php のスクリプトを作成しました。それは正常に動作しますが、ここでの私の問題は、 readdir( ) が を返し続けることです。および .. ディレクトリの内容に加えて、ディレクトリ ポインタ。この OTHER THAN が返された配列をループして手動で削除するのを防ぐ方法はありますか?

好奇心旺盛な人のための関連コードは次のとおりです。

//Open the "reports" directory
$reportDir = opendir('reports');

//Loop through each file
while (false !== ($report = readdir($reportDir)))
{
  //Convert the filename to a proper title format
  $reportTitle = str_replace(array('_', '.php'), array(' ', ''), $report);
  $reportTitle = strtolower($reportTitle);
  $reportTitle = ucwords($reportTitle);

  //Output link
  echo "<a href=\"viewreport.php?" . $report . "\">$reportTitle</a><br />";
}

//Close the directory
closedir($reportDir);
4

5 に答える 5

18

while上記のコードでは、ループの最初の行として追加できます。

if ($report == '.' or $report == '..') continue;
于 2009-10-06T14:17:43.623 に答える
4
array_diff(scandir($reportDir), array('.', '..'))

またはさらに良い:

foreach(glob($dir.'*.php') as $file) {
    # do your thing
}
于 2009-10-06T14:17:20.340 に答える
2

いいえ、これらのファイルはディレクトリに属しているため、それらreaddirを返す必要があります。私は他のすべての行動が壊れていると考えています。

とにかく、それらをスキップしてください:

while (false !== ($report = readdir($reportDir)))
{
  if (($report == ".") || ($report == ".."))
  {
     continue;
  }
  ...
}
于 2009-10-06T14:18:46.960 に答える
1

「。」など、別の方法はわかりません。および「..」も適切なディレクトリです。ifとにかくループして適切なレポート URL を形成しているので、無視...てさらに処理するために少しだけ挿入することもできます。

EDIT
Paul Lammertsma は私より少し速かったです。それがあなたが望む解決策です;-)

于 2009-10-06T14:18:11.717 に答える