2014-10-06 100 views
1

我想使用下面的代碼將10.000個文件打包到.tar文件中。沒有太大的檔案大小不會超過幾個100MB。我的問題是這需要很長時間。其實我現在正在打包9000個文件一個小時。在shell中這是在2分鐘內完成的,它是一個運行apache2的強大的linux服務器。那麼這裏有什麼問題?我怎樣才能提高PHP腳本的速度?PHP:創建.tar文件極其緩慢

$Path = str_replace('\\', '/', realpath($Path)); 

if (is_dir($Path) === true) { 
    $files = new \RecursiveIteratorIterator(new \RecursiveDirectoryIterator($Path), \RecursiveIteratorIterator::SELF_FIRST); 
    $archive = new \PharData('/var/www/test.tar'); 

    foreach ($files as $file) {       
     $filePath = $file->getRealPath(); 
     $archive->addFile($filePath); 
    } 
+0

是否有所作爲,如果你使用'PharData :: buildFromIterator()'? – 2014-10-06 11:36:50

+0

運行一些簡單的性能分析:在getRealPath和addFile調用之後添加一個時間戳。 – 2014-10-06 11:37:10

+0

如果命令行非常快,那麼爲什麼不從PHP調用命令行呢? – 2014-10-06 11:45:45

回答

1

RecursiveIteratorIterator非常慢...但問題是爲什麼你使用它?嘗試Phardata buildFromDirectory功能:

<?php 
... 
if (is_dir($Path) === true) { 
    $archive = new PharData('/var/www/test.tar'); 
    $archive->buildFromDirectory($Path); 
} 
... 
?> 

希望是幫助

+0

完美謝謝。 – 2014-10-06 12:06:12