解決PHP超時(shí)問(wèn)題 |
發(fā)布時(shí)間: 2012/6/26 16:42:52 |
當(dāng)PHP頁(yè)面處理大事務(wù)時(shí),頁(yè)面往往會(huì)發(fā)生超時(shí)的錯(cuò)誤,我解決此問(wèn)題的方法如下: 1.優(yōu)化程序代碼: 這種方法可能有時(shí)立竿見(jiàn)影,但對(duì)一些已經(jīng)很優(yōu)化或者第三方開(kāi)發(fā)的程序,可能用處不大,但我個(gè)人覺(jué)得這個(gè)辦法還是應(yīng)該優(yōu)先考慮,這個(gè)一個(gè)優(yōu)秀程序員必需有的工作美德。 2.對(duì)多個(gè)任務(wù)進(jìn)行拆分: 對(duì)于一些程序,可能問(wèn)題并不出現(xiàn)在代碼效率上,如Paypal的SOAP調(diào)用,大量時(shí)間花費(fèi)在網(wǎng)絡(luò)的數(shù)據(jù)傳遞上了,(此問(wèn)題在Web Services的遠(yuǎn)程調(diào)用時(shí)經(jīng)常發(fā)生),我們當(dāng)然不能等將來(lái)網(wǎng)速的提高來(lái)解決這個(gè)問(wèn)題。其實(shí)我們可以查看一下在一個(gè)POST動(dòng)作中是否包含了多個(gè)任務(wù),如付費(fèi)、發(fā)Email、發(fā)貨等等。如是這樣其實(shí)可以對(duì)這些任務(wù)進(jìn)行拆分,把這個(gè)工作拆分成多個(gè)子工作來(lái)實(shí)現(xiàn)。如執(zhí)行完付費(fèi)任務(wù)時(shí),使用PHP的 Header函數(shù)重定向到發(fā)送Email的頁(yè)面,完成后再定向到其他頁(yè)面,采用redirect頁(yè)面的方式來(lái)接力地完成任務(wù)。 3.進(jìn)行PHP設(shè)定值的修改 如果以上兩種方法仍然無(wú)法解決,代碼已經(jīng)最優(yōu)話,同時(shí)只有一個(gè)單任務(wù)的工作需要完成。針對(duì)這樣的情況,只能修改PHP的設(shè)定值了。不過(guò)建議不要直接修改PHP.ini,這樣會(huì)延長(zhǎng)所有PHP執(zhí)行的最大時(shí)間。簡(jiǎn)單的方法就是使用init_set函數(shù),以下的代碼把PHP最大執(zhí)行時(shí)間設(shè)定為180秒。 ini_set('max_execution_time', '180'); 但是必須在非安全模式(safe mode)下 同時(shí)可以使用ini_get把原來(lái)設(shè)置的max_execution_time保存下來(lái),在進(jìn)行完操作時(shí)回復(fù)原來(lái)的設(shè)定值。 也可以用 set_time_limit(0); 本文出自:億恩科技【1tcdy.com】 服務(wù)器租用/服務(wù)器托管中國(guó)五強(qiáng)!虛擬主機(jī)域名注冊(cè)頂級(jí)提供商!15年品質(zhì)保障!--億恩科技[ENKJ.COM] |