2009-10-06 2 views
2

저는 회사에 간단한 웹 보고서 시스템을 코딩하고 있습니다. "reports"디렉토리에있는 파일 목록을 가져 와서 해당 보고서에 대한 링크를 자동으로 생성하는 index.php 용 스크립트를 작성했습니다. 그것은 잘 작동하지만 내 문제는 여기에 readdir() 계속 반환합니다. 디렉토리의 내용 외에 디렉토리 포인터. 반환 된 배열을 통해 반복하는 것 이외의 다른 것을 방지하고 수동으로 스트립하는 것을 방지 할 수있는 방법이 있습니까? 당신은 while 루프의 첫 번째 라인으로 추가 할 수 있습니다, 당신의 위의 코드에서PHP readdir()은 "."및 ".."항목을 반환합니다.

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

답변

14

:

//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); 
+0

간단한 충분한 해결책을. 이 문제를 피하기 위해 readdir에 매개 변수 옵션이있을 것으로 기대하고 있었지만 그렇지 않을 수도 있습니다. 이 질문은 똑같은 정확한 해결책으로 약 5 개의 동시 답을 얻었습니다. 그것이 처음이기 때문에 이것을 받아들입니다. – DWilliams

+0

좋고 깨끗한 예 +1 – Andrew

4
array_diff(scandir($reportDir), array('.', '..')) 

또는 더 나은 : 여기

는 관련 호기심에 대한 코드입니다 :

if ($report == '.' or $report == '..') continue; 
1

다른 방법을 모르겠다. " 및 ".."도 적절한 디렉토리입니다. 어쨌든 올바른 보고서 URL을 구성하기 위해 반복 할 때 추가 처리를 위해 if을 무시하고 ...을 무시할 수 있습니다.

편집
폴 램머 세마는 나보다 약간 빠릅니다. 원하는 솔루션입니다.

2

아니요, 해당 파일은 디렉토리에 속하므로 readdir은 파일을 반환해야합니다. 나는 모든 다른 행동을 망가 뜨리는 것으로 생각할 것입니다.

어쨌든, 단지 그들을 건너 뜁니다

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