2012-05-03 16 views
0

我有什麼:如何自動數據採集和10%未凍結

(如果需要採取在本地主機上看看或引起火災:http://pastebin.com/virLR7dF

(帶圖像看看提出我的情況:http://iv.pl/images/47143498348127804676.png

我有crawles給網站,並提取數據的PHP腳本作爲可變因素:

$ID = "data"; //this is just an example 
$name = "data"; 
$price = "data"; 
$image = "data"; 

腳本會將這些數據放入MySQL DB中。

出了什麼問題?

我可以用for循環自動化它,所以我會一次獲得更多的數據。但是,如果我循環100萬次,我的腳本將在某個時間點凍結​​,並從開始(找到它從哪裏開始並從該點開始)是有問題的。

如何用PHP/JS使其向:

1.收集數據

2.停止的10個部分和顯示關於所收集的數據

3信息。收集未來10部分數據

站和新信息添加到previosly顯示的信息

*有暫停功能停止後,下一部分聚集

*有RESUME funcion最後一部分後,開始收集

+0

你需要什麼的JavaScript?或者是Node.js是PHP的替代品? – Bergi

+0

什麼問題 - 你說它凍結,但你的問題是如何編寫代碼的幾個部分?如果你想讓某人爲你寫代碼,請去freelancer dot com或者其他地方。請提出具體問題的具體問題 – ppumkin

+0

感謝您的回覆ppumkin。我有整個腳本,只是不知道如何使PHP停止一段時間的工具,並添加數據已存在和已收集的數據列表。阿倫已經幫助睡眠()。 –

回答

1

輸出緩衝可能會幫助你在PHP

嘗試ob_start & ob_flush

ob_start該函數將打開輸出緩衝。雖然輸出 緩衝處於活動狀態,但不會從腳本發送輸出(而不是 標頭),而是將輸出存儲在內部緩衝區中。

使用ob_flush此功能將發送輸出緩衝區的內容(如果 任何)

0

有一些事情這樣做時可能會出現問題。

1)在循環內部觸發錯誤,腳本停止執行。

解決方法:把錯誤變成例外,它們是開捕

2)您超過了時間限制。

解決方案:設置時間限制到零

例子:

set_error_handler(function($errno, $errstr, $errfile, $errline) { 
    if($errno != E_STRICT && $errno != E_DEPRECATED && $errno != E_NOTICE) { 
     throw new Exception($errstr.' in '.$errfile.' on line '.$errline); 
    } 
    return false; 
}); 

set_time_limit(0); 

function my_loop_func() { 
// do what ever... 
} 

while(true) { 
    try { 
    my_loop_func(); 
    } 
    catch(Exception $e) { 
    // write some log message here might be good 
    } 
    sleep(10); 
} 
+0

感謝那個例子,我會在下午看。 –