2012-01-04 2 views
1

파일 시스템 디렉토리를 재귀 적으로 (모든 파일과 하위 디렉토리를 포함하여) 읽을 수 있고 배열이나 객체 또는 JSON 문자열 또는 XML을 반환 할 수있는 기성품 PHP 클래스를 아는 사람 구조의?PHP 용 박스 구조체 디렉토리 구성 요소

나는이 일을 스스로하고 싶지만 클라이언트가 방금 전화를 걸어 오늘 끝내야한다고 주장하고 있습니다. 예.

+0

예상되는 형식은 무엇입니까? 디렉토리와 파일에 대한 전체 경로 목록 계층 적 JSON/XML 구조? 어떤 다른 정보를 원하십니까? (filemtime, filectime, fileatime, size, content-type). 명확한 주셔서 감사합니다 –

+0

http://php.net/glob – hakre

+0

@MathieuDumoulin - 사실 파일 이름은 괜찮을 것입니다. 계층 적 json 문자열 또는 PHP 배열이 이상적으로 들립니다. 나는 웹 사이트 방문객에게 자신을 파싱하려고한다. – phirschybar

답변

2

빌드 된 RecursiveDirectoryIterator­Docs 클래스를 사용하여 원하는 결과를 만들 수 있습니다. 다음 예에서 계층 적 배열이 생성됩니다

$dir = '.'; 

$dirit = new RecursiveDirectoryIterator($dir); 
$it = new RecursiveIteratorIterator($dirit); 
$array = array(); 
foreach($it as $file) 
{ 
    $path = substr($file, strlen($dir)+1); 
    $parts = explode(DIRECTORY_SEPARATOR, $path); 
    $filename = array_pop($parts); 
    $dirname = implode(DIRECTORY_SEPARATOR, $parts); 
    $build = &$array; 
    foreach($parts as $part) 
    { 
     if (!isset($build[$part])) $build[$part] = array(); 
     $build = &$build[$part]; 
    } 
    $build[] = $filename; 
    unset($build); 
} 

$array 다음 목록이 포함됩니다 : I로

json_encode($array); 

{"0":".buildpath","1":".project",".settings":["org.eclipse.php.core.prefs"],"array":["array-keys.php","array-stringkey-e 
xplode.php"]} 

: 뭔가에

Array 
(
    [0] => .buildpath 
    [1] => .project 
    [.settings] => Array 
     (
      [0] => org.eclipse.php.core.prefs 
     ) 

    [array] => Array 
     (
      [0] => array-keys.php 
      [1] => array-stringkey-explode.php 
     ) 
) 

json_encode­Docs 수있는 간단한 회전이 사용을 위의 설명에 쓰여진대로 glob도 유용 할 수 있습니다.

1

PHP manual for dir의 댓글 페이지에는 디렉토리 (및 하위 디렉토리)의 내용을 재검토하기위한 코드 조각이 있습니다.) echo 문 대신 간단히 배열을로드하고이를 반환하십시오. 배열의 배열이된다). ...으로 필터링해야하지만 그렇지 않은 경우 대부분 처리됩니다.

1

전역 (yuk) 또는 배열 병합 기법을 사용하여 직접 만들 수 있습니다. 기본 사항은 다음과 같습니다.

function recursiveListing($currentDir){ 
    $results = array(); 
    $dh = opendir($currentDir); 
    while(($f = readdir($dh)) !== false){ 
     if($f == '.' || $f == '..'){ continue; } 
     $results[] = $currentDir.'/'.$f; 
     if(is_dir($currentDir.'/'.$f)){ 
      $results = array_merge($results, recursiveListing($currentDir.'/'.$f)); 
     } 
    } 
    return $results; 
} 

이렇게하면 시작해야하며 전체 경로 목록을 작성해야합니다. 이것을 json으로 반환하는 것은 json_encode()에서 비교적 쉽습니다. XML의 경우 직접 출력하거나 간단한 루핑 기능을 만들 수 있습니다.