2015-08-25 30 views
0

PHP - Divide et Impera避免致命錯誤:Maxim執行時間超過每個人

我正在構建一個'Seeker'以從7個網站獲得一些價格。我正在使用cUrl來獲得這個價格,我正在處理這個問題:致命錯誤:超出最大執行。我已經閱讀了這篇文章並看到了一些解決方案,但是我想知道我是否可以將流程分割得比現在更多。因此,這裏是我的應用程序:

客戶進入我的網站上,搜索項目的一些代碼(最壞情況下的5個不同的代碼,一旦一個),併發送價格的請求。所以我張貼的最多5碼我MainController的陣列,每一個控制器上的陣列分佈,像這樣:

$codesArray -> MainController -> foreach(ControllersList as Controller){Controller->getPrices($codesArray)} 

我認爲時間執行分配錯誤的,或者不是我想要的,因爲我已經用3個代碼和「致命錯誤:最大執行時間:30秒在開始33秒之後在第五個控制器上進行測試。我認爲不可能在3秒內搜索3個項目4次並超過第5個項目,所以這意味着服務器正在計算MainController進程,而不是每個進程本身。我的問題是,我怎樣才能正確劃分流程以獲得每個控制器的時間分配?

我希望我讓自己明白,對不好的英語抱歉,也不好解釋。

注:我測試的每個控制器的7碼數組,我從來沒有得到這個致命錯誤,這就是爲什麼我要分割的過程,但我不知道如何..

注意二:發送一個代碼一次會導致n * 7更多的捲曲執行,因爲對於數組,該過程僅重複搜索功能,而不是整個連接到網站 - >檢查登錄 - >登錄* - >搜索

回答

0

定時器與整個請求相關,不會在不同的控制器調用上分開。整個執行時間不能超過30秒(你可以增加時間限制在php.ini, 而且,它們不是多進程:PHP是單線程的,所以你不能產生另一個線程並運行它。並行呼叫使用curl_multi_init(),然後做處理(我假設通話需要比實際處理更多的時間)

+0

是的,錯誤是在curl_exec($ ch);行我會試試這個,另一個問題是,如果我將控制器按執行時間分割,就像MoreTimeExecution和4 LessTImeExecution中的這3個一樣,並用ajax調用每個控制器將導致每個類別的響應時間爲30秒,這是因爲我會嘗試它並查看結果。阿賈克斯提出2個要求? –

相關問題