2010-03-13 136 views
4

我正在構建一個蜘蛛,它將遍歷各種網站並進行數據挖掘。從一個PHP腳本運行PHP腳本而不會阻塞

由於我需要分別獲取每個頁面,這可能需要很長時間(可能是100頁)。 我已經將set_time_limit設置爲每頁2分鐘,但看起來像apache會在5分鐘後終止腳本。

這通常不是一個問題,因爲這將從cron或類似的東西沒有這個時間限制運行。不過,我還希望管理員能夠通過HTTP接口手動啓動抓取。

apache在整個持續時間內保持活躍狀態​​並不重要,我打算使用AJAX觸發一次抓取,並在AJAX中稍後檢查一次。

我的問題是如何從一個PHP腳本中啓動取指操作,而當腳本調用它時終止提取操作。

也許我可以使用系統('script.php &'),但我不知道它會做的伎倆。 有沒有其他想法?

+0

一個朋友告訴約配有nohup的,認爲這會工作? 這是系統('nohup php -f script.php&') –

回答

5
$cmd = "php myscript.php $params > /dev/null 2>/dev/null &"; 

    # when we call this particular command, the rest of the script 
    # will keep executing, not waiting for a response 
    shell_exec($cmd); 

這樣做是將所有STDOUT和STDERR發送到/ dev/null,並且腳本繼續執行。即使'parent'腳本在myscript.php之前完成,myscript.php也會完成執行。

+2

不要忘記在$ params上使用http://php.net/manual/en/function.escapeshellarg.php – Andy

+0

謝謝, :) –

+0

NP,歡迎來到SO – Erik

1

如果你不想使用exec你可以使用php內置的函數!

ignore_user_abort(true); 

這將告訴腳本繼續即使瀏覽器和服務器之間的連接斷開;)

+0

這應該是選中的回答 – patrick