PHP readdir () döner "

4 Cevap php

Ben şirket için basit bir web raporu kodlama sistemi var. Ben "raporlar" dizindeki dosyaların bir listesini alır ve otomatik olarak o rapora bir bağlantı oluşturur index.php için bir senaryo yazdı. Gayet iyi çalışıyor, ama burada benim sorunum readdir () dönen tutar olmasıdır. ve .. dizinin içeriğine ek olarak dizin işaretçileri. Dönen diziye döngü ve elle sıyırma bunun dışında diğer önlemek için herhangi bir yolu var mı?

İşte meraklı için ilgili kodu:

//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 Cevap

Lütfen yukarıdaki kodu, size while döngüde bir ilk satırı olarak eklemek olabilir:

if ($report == '.' or $report == '..') continue;
array_diff(scandir($reportDir), array('.', '..'))

hatta daha iyisi:

foreach(glob($dir.'*.php') as $file) {
    # do your thing
}

Hayır, bu dosyalar bir dizine ait ve readdir, böylece onlara dönmelidir. Ben her davranış kırık olması düşünecektim.

Her neyse, sadece onları atlamak:

while (false !== ($report = readdir($reportDir)))
{
  if (($report == ".") || ($report == ".."))
  {
     continue;
  }
  ...
}

Ben, başka bir yol bilmiyorum gibi "." ve ".." uygun dizinleri de vardır. Eğer uygun rapor URL'yi oluşturmak için yine döngü konum olarak, sadece if o . ve .. daha fazla işlem için görmezden biraz koymak olabilir.

EDIT
Paul Lammertsma was a bit faster than me. That's the solution you want ;-)