2013-08-30 77 views
0

我想使用函數從所有目錄和子目錄中獲取所有文件名,大小,路徑。我已經使用遞歸函數完成了相同的操作。這是我的代碼。從目錄和子目錄中獲取所有文件,大小,路徑php

function scan_dir($path, $exclude){ 

$ite = new RecursiveDirectoryIterator($path); 
$bytestotal=0; 
$nbfiles=0; 

$file_data = array(); 

$i= 0; 
foreach (new RecursiveIteratorIterator($ite,RecursiveIteratorIterator::CHILD_FIRST) as $filename => $cur) { 


if ($cur->isDir()) 
    { 
     continue ; 
    } 

    $files = str_replace('\\','/', $filename); 
    $filesize = $cur->getSize(); 

    $exclude = array_filter($exclude); 


    $data = array('name'=>$files, 'path'=>$cur->getPath(),'size'=>$cur->getSize()); 
    $file_data[] = $data; 
    $i++; 
    $nbfiles++; 

    $bytestotal += $filesize;  
} 
    $bytestotal = $bytestotal; 
    return array('total_files'=> $nbfiles, 'total_size' => $bytestotal, 'files'=> $file_data); 
} 

問題是當我在linux服務器上運行我的代碼時,由於遞歸函數,它運行緩慢。請我可以有相同的替代,因爲我可以得到相同的輸出,但使用不同的功能。

我想添加一個如果其他部分即檢查服務器,如果Linux的然後{}其他{遞歸函數} 任何幫助非常感謝。

+0

單獨用於Linux的檢查將不會削減它。速度通常是因爲樹的深度/大小和底層文件系統。也許你需要減少深度(使用遞歸迭代器,你可以控制深度http://www.php.net/recursiveiteratoriterator.setmaxdepth) – hakre

回答

0

使用glob

$folder = dirname(__FILE__) ."./images/*"; 
foreach(glob('./images/*.*') as $filename) { 
    echo $filename; 
    echo $size = filesize($filename); 
} 
相關問題