2015-05-04 51 views
1

大家好我已經做了功能得到ZF2完整目錄

function getDirContents($dir, &$results = array()){ 
$files = scandir($dir); 

foreach($files as $key => $value){ 
$path = realpath($dir.DIRECTORY_SEPARATOR.$value); 
if(!is_dir($path)) { 
$results[] = $path; 
} else if(is_dir($path) && $value != "." && $value != "..") { 
getDirContents($path, $results); 
$results[] = $path; 
} 
} 

return $results; 
} 

,我像從我的控制器

$value = $this->getDirContents("/var/www/staging/public/files/rgerger"); 

方式調用它通過我uable得到的全部細節該文件夾我的意思是所有內容的目錄和子目錄.. scandir只在目標文件夾下面給出的文件夾只能被掃描,但是這並沒有給我子文件夾的內容。

+1

我會建議檢查SPL ['DirectoryItterator'](http://php.net/manual/en/class.directoryiterator.php)或['RecursiveDirectoryIterator'](http://php.net/manual /en/class.recursivedirectoryiterator.php)。這些內置類專門用於迭代文件系統目錄。 – AlexP

回答

0

您需要將遞歸方法調用的結果分配給調用者。

我的(未經測試)例如

function getDirectoryContents($dir) 
{ 
    $files = []; 

    if (is_dir($dir)) { 
     foreach(scandir($dir) as $key => $fileName) { 

      $filePath = realpath($dir . DIRECTORY_SEPARATOR . $fileName); 

      if ($fileName == '.' || $fileName == '..') { 
       continue; 
      } 

      if (is_dir($filePath)) { 
       $files[] = getDirectoryContents($filePath); 
      } else { 
       $files[] = $fileName; 
      } 
     } 
    } 
    return $files; 
} 

按我的意見,你也可以使用SPL RecursiveDirectoryIterator這是PHP對遍歷文件系統內置的面向對象的解決方案。