2012-10-04 39 views
1

使用PHP庫simple_html_dom我通過列表的URL作爲DOM和每個這些我試圖找到一個字符串,如果我找到它我保存在一個數組中的URL否則我會進入下一個週期,最後返回urls數組。 該腳本對每個網址採用某種秒的順序。 經過一些循環後腳本卡在文件中的$ dom-> load($ url)行get html引發了分段錯誤,循環次數因不同的url列表而異。 我試圖在負載($ url)中隔離一個測試腳本中的調用,該測試腳本僅用於循環腳本卡住的URL,但測試腳本以無錯誤結束(但我無法檢查dom的print_r,因爲我的firefox崩潰,如果我嘗試查看頁面源)。 我正在LAMP服務器上工作。下面是代碼:使用簡單的HTML DOM文件的分段錯誤獲取HTML

error_reporting(E_ALL); 
ini_set("max_execution_time", "300"); 
ini_set("memory_limit", "512M"); 
ini_set('output_buffering', 0); 
ini_set('implicit_flush', 1); 
ob_end_flush(); 
ob_start(); 
set_time_limit(100); 

$urlArray = array(); 

foreach($urlArray as $url){ 
    $found = false; 
    $dom = file_get_html($url); 
    foreach(($dom->find('target')) as $caught){ 
     array_push($link, $caught); 
     $found = true 
    } 
    if($trovato){ 
     return $link; 
    }else{ 
     echo "not found"; 
    } 
} 

THX任何幫助

+0

所以你在PHP中遇到了分段錯誤而在Firefox中遇到了崩潰?這就是我所說的糟糕的一天... *(順便說一句,這不是你真正的代碼,是嗎?)* –

+0

問題是分段錯誤,我認爲firefox崩潰只是導致顯示整個domDocument只是太多的數據,我不要真的需要這樣做,所以它沒有太大意義 – Riccardo

回答

6

那麼其共同的問題,這裏是一個錯誤http://sourceforge.net/p/simplehtmldom/bugs/103/。您if語句之前 添加此行:

$dom->clear(); 
unset($dom); 

晴,你不會看到後,任何段錯誤。但是,如果你解析幾千個URL(像我:))比你可能再次遇到它。所以我的解決辦法是 - 打開simple_html_dom.php文件,評論146和149之間的所有行

function clear() 
{ 
    /* 
    $this->dom = null; 
    $this->nodes = null; 
    $this->parent = null; 
    $this->children = null; 
    */ 
} 

UPDATE:此外,如果你對此有何評論這行 - 你的內存消耗將增加每個迭代解析

+0

謝謝,這已經是這樣一個節省時間。 – Jason

+0

而不是根據錯誤評論這些行,它說取消這些變量。更多信息:http://sourceforge.net/p/simplehtmldom/bugs/103/ – Devaroop

+0

@Devaroop,是的!但它沒有幫助我,我仍然在未設置後出現段錯誤。評論是幫助我解決這個問題的唯一方法。 – kirugan