解決PHP執(zhí)行超時(shí)問題
當(dāng)PHP頁面處理大事務(wù)時(shí),頁面往往會(huì)發(fā)生超時(shí)的錯(cuò)誤,我解決此問題的方法如下:
1.優(yōu)化程序代碼:
這種方法可能有時(shí)立竿見影,但對(duì)一些已經(jīng)很優(yōu)化或者第三方開發(fā)的程序,可能用處不大,但我個(gè)人覺得這個(gè)辦法還是應(yīng)該優(yōu)先考慮,這個(gè)一個(gè)優(yōu)秀程序員必需有的工作美德。
2.對(duì)多個(gè)任務(wù)進(jìn)行拆分:
對(duì)于一些程序,可能問題并不出現(xiàn)在代碼效率上,如Paypal的SOAP調(diào)用,大量時(shí)間花費(fèi)在網(wǎng)絡(luò)的數(shù)據(jù)傳遞上了,(此問題在Web Services的遠(yuǎn)程調(diào)用時(shí)經(jīng)常發(fā)生),我們當(dāng)然不能等將來網(wǎng)速的提高來解決這個(gè)問題。其實(shí)我們可以查看一下在一個(gè)POST動(dòng)作中是否包含了多個(gè)任務(wù),如付費(fèi)、發(fā)Email、發(fā)貨等等。如是這樣其實(shí)可以對(duì)這些任務(wù)進(jìn)行拆分,把這個(gè)工作拆分成多個(gè)子工作來實(shí)現(xiàn)。如執(zhí)行完付費(fèi)任務(wù)時(shí),使用PHP的Header函數(shù)重定向到發(fā)送Email的頁面,完成后再定向到其他頁面,采用redirect頁面的方式來接力地完成任務(wù)。
3.進(jìn)行PHP設(shè)定值的修改
如果以上兩種方法仍然無法解決,代碼已經(jīng)最優(yōu)話,同時(shí)只有一個(gè)單任務(wù)的工作需要完成。針對(duì)這樣的情況,只能修改PHP的設(shè)定值了。不過建議不要直接修改PHP.ini,這樣會(huì)延長所有PHP執(zhí)行的最大時(shí)間。簡單的方法就是使用init_set函數(shù),以下的代碼把PHP最大執(zhí)行時(shí)間設(shè)定為180秒。
ini_set('max_execution_time', '180');
同時(shí)可以使用ini_get把原來設(shè)置的max_execution_time保存下來,在進(jìn)行完操作時(shí)回復(fù)原來的設(shè)定值。
