2013-10-30 34 views
2

我有一個腳本,用來自eBay的列表更新我的數據庫。它抓住物品的賣家總是不一樣的,有些賣家擁有超過30,000個物品。我需要能夠一口氣抓住所有這些列表。非常長的腳本不斷失敗

因爲我已經爲此創建了客戶端應用程序,所以我已經擁有所有的數據提取/存儲工作。現在我需要一種自動化的方式來瀏覽數據庫中的每個賣家,並提取他們的物品。

我的想法是使用CRON來執行PHP腳本,然後將填充數據庫。

當我試圖執行需要很長時間才能執行的腳本時,我不斷收到內部服務器錯誤頁面。

我已經設置

ini_set('memory_limit', '2G'); 
    set_time_limit(0); 
    error_reporting(E_ALL); 
    ini_set('display_errors', true); 

的腳本,但它仍保持在約45秒大關失敗。我已經選擇了ini_get_all(),並且設置仍然存在。

是否還有其他需要調整的設置,以便腳本只要需要就可以運行?

+1

_「我不斷收到內部服務器錯誤頁面_」 - 標準錯誤頁面......那些說_「有關此錯誤的更多信息可能在服務器錯誤日誌中可用」_ ...? – CBroe

+0

我實際上正在查看錯誤的錯誤日誌文件,並想知道爲什麼沒有什麼有用的東西顯示出來。 –

回答

0

好吧,事實證明,我忽略了我通過瀏覽器測試腳本的事實。這意味着Apache正在處理PHP進程,該進程使用mod_fcgid執行,該進程的超時時間恰好爲45秒。

直接從shell執行腳本,CRON工作得很好。

0

注意從set_time_limit功能的警告:

該函數時PHP在安全模式下運行沒有影響。除了關閉安全模式或更改php.ini中的時間限制外,沒有任何解決方法。

您是否在安全模式下運行?嘗試關閉它。

這是大:

的參數或者set_time_limit()函數和配置指令的max_execution_time隻影響腳本本身的執行時間。在確定腳本運行的最長時間時,不包括使用system()系統調用,流操作,數據庫查詢等腳本執行之外發生的任何活動時間。在測量時間是真實的Windows上,這不是事實。

您是否在使用外部系統調用向eBay發送請求?或長時間調用數據庫?

尋找特別長的操作profiling your php script,並尋找長時間操作(> 45秒)。嘗試將這些操作分解爲更小的塊。

+0

安全模式已關閉。沒有很長的電話到eBay或數據庫。每次eBay通話都需要大約1-2秒才能完成,它會插入/更新數據庫,然後請求eBay通話的第2頁。它已經被全部分割,以確保沒有一個具體的行動需要很長時間。有很多順序的動作。 –