2013-01-04 203 views
-2

我有我的服務器上創建文件的大量一個PHP腳本,但不幸的是它運行太長。我的託管服務提供商的時間限制爲90秒,腳本可能需要一個小時才能完成! Set_Time_Limit被託管提供程序阻止,並且在睡眠函數中編譯並不會真正暫停腳本。有沒有另外一種方法可以暫停,以便在90秒後不會退出?暫停PHP腳本,以防止超時

謝謝! Sander

+1

你有沒有想過重新設計它來處理小批量? –

+0

PHP支持[threads](http://php.net/manual/en/class.thread.php),因此可以異步創建文件。哦,忘了說不是天生的。 – Leri

+0

腳本必須在我的數據庫中運行大約415條記錄,處理2條記錄大約需要90秒。這意味着我必須創建207個不同的腳本。這幾乎不可行,但這甚至是一個較小的,所以除非你有這樣一個聰明的想法,它不是一個真正的選擇? – user1555076

回答

0

不知道更多關於您的代碼有點困難,但我認爲您必須編寫代碼以便腳本被多次調用。 是否有可能運行cron作業?腳本可以運行x min,並將nest y文件放入隊列中。

爲什麼要將所有這些文件放在第一位?聽起來不像是個好主意..

+0

我正在創建一個大型的產品數據庫,我想在每個子域中都有一個單獨的頁面,並帶有一個特定類別的結果列表。我有1800個類別和415個子域名,我不明白這可以做得更容易嗎?所有頁面都使用模板,因此每個頁面實際上只包含兩行,即指向模板的鏈接和用於指明我們正在處理的類別的行。 不幸的是我無法執行Cron工作,也阻斷:( – user1555076

+0

@user什麼動態網頁?因此,他們會產生*當要求*?您可以緩存那些太...此外,垃圾場?(·ω·) – deceze

+0

我們的商業模式圍繞Google索引,這就是爲什麼我不熱衷於動態頁面,我應該提到這一點。垃圾郵件農場是什麼意思? – user1555076

1

「處理2點的記錄佔據了約90秒。」

讓它一次處理一個記錄,增加一個計數器,刷新頁面,並命中了下記錄處理:-)

+0

或更好,然後修復該程序,以便處理兩個記錄需要0.09秒更現實的數字。兩個記錄的90秒是不合格的。如果你有*真的*需要這種處理的數據,你就會知道共享主機上的PHP是錯誤的解決方案。 – SDC

1

不幸的是沒有。你必須把它分解成更小的碎片,或者使用execsystem

還有另一種方法here

4

我明白爲什麼你要與你的主機受挫運行後臺工作,但他們爲了他們的客戶做好這樣的事情。如果一個進程可以承擔所有的處理能力,則會減慢服務器上的所有其他站點。

如果你真的需要對每條記錄進行那種處理,那麼共享主機並不是正確的解決方案;你需要一個專用的服務器。

然而,我的猜測是,真正解決您的真正的問題是不是扔掉它更多的處理能力,但解決方案的性能。你沒有解釋你在做什麼,這使得一個單獨的記錄需要45秒的時間來處理,但是如果它花費那麼長時間,最好是令人印象深刻的東西。更可能的是,這意味着有很大的改進空間。

我建議做了一些分析,以明確它是什麼你的代碼,使得它跑的那麼慢。通過一些工作,我願意打賭你可以將速度數字降低至少一個數量級,可能更多。

+0

+1正確的是我在閱讀問題時的想法。 – Bart