【W(wǎng)eb服務器超時處理】
創(chuàng)新互聯(lián)建站于2013年開始,先為太和等服務建站,太和等地企業(yè),進行企業(yè)商務咨詢服務。為太和企業(yè)網(wǎng)站制作PC+手機+微官網(wǎng)三網(wǎng)同步一站式服務解決您的所有建站問題。
[ Apache ]
一般在性能很高的情況下,缺省所有超時配置都是30秒,但是在上傳文件,或者網(wǎng)絡速度很慢的情況下,那么可能觸發(fā)超時操作。
目前apachefastcgiphp-fpm模式下有三個超時設置:
fastcgi超時設置:
修改httpd.conf的fastcgi連接配置,類似如下:
代碼如下:
IfModulemod_fastcgi.c
FastCgiExternalServer/home/forum/apache/apache_php/cgi-bin/php-cgi-socket/home/forum/php5/etc/php-fpm.sock
ScriptAlias/fcgi-bin/"/home/forum/apache/apache_php/cgi-bin/"
AddHandlerphp-fastcgi.php
Actionphp-fastcgi/fcgi-bin/php-cgi
AddTypeapplication/x-httpd-php.php
/IfModule
你是cli模式還是cgi模式?cli模式不用設默認就是無時間限制,cgi默認是有30秒超時限制。
你可以先看看每次中斷是固定時長,還是固定次數(shù);也可以多打日志,每次循環(huán)都輸出些參考參數(shù)如循環(huán)條件、內(nèi)存使用等信息,再分析哪些可能導致程序中斷的原因。
具體代碼如下:
?php
$ch = curl_init();
$timeout = 5;
curl_setopt ($ch, CURLOPT_URL, '');
curl_setopt ($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt ($ch, CURLOPT_CONNECTTIMEOUT, $timeout);
$file_contents = curl_exec($ch);
curl_close($ch);
echo $file_contents;
?
PHP 獨特的語法混合了C、Java、Perl以及PHP自創(chuàng)的語法。
它可以比CGI或者Perl更快速地執(zhí)行動態(tài)網(wǎng)頁。用PHP做出的動態(tài)頁面與其他的編程語言相比,PHP是將程序嵌入到HTML(標準通用標記語言下的一個應用)文檔中去執(zhí)行,
執(zhí)行效率比完全生成HTML標記的CGI要高許多;
PHP還可以執(zhí)行編譯后代碼,編譯可以達到加密和優(yōu)化代碼運行,使代碼運行更快。
當PHP頁面處理大事務時,頁面往往會發(fā)生超時的錯誤,我解決此問題的方法如下:1.優(yōu)化程序代碼:這種方法可能有時立竿見影,但對一些已經(jīng)很優(yōu)化或者第三方開發(fā)的程序,可能用處不大,但我個人覺得這個辦法還是應該優(yōu)先考慮,這個一個優(yōu)秀程序員必需有的工作美德。2.對多個任務進行拆分:對于一些程序,可能問題并不出現(xiàn)在代碼效率上,如Paypal的SOAP調(diào)用,大量時間花費在網(wǎng)絡的數(shù)據(jù)傳遞上了,(此問題在Web Services的遠程調(diào)用時經(jīng)常發(fā)生),我們當然不能等將來網(wǎng)速的提高來解決這個問題。其實我們可以查看一下在一個POST動作中是否包含了多個任務,如付費、發(fā)Email、發(fā)貨等等。如是這樣其實可以對這些任務進行拆分,把這個工作拆分成多個子工作來實現(xiàn)。如執(zhí)行完付費任務時,使用PHP的Header函數(shù)重定向到發(fā)送Email的頁面,完成后再定向到其他頁面,采用redirect頁面的方式來接力地完成任務。3.進行PHP設定值的修改如果以上兩種方法仍然無法解決,代碼已經(jīng)最優(yōu)話,同時只有一個單任務的工作需要完成。針對這樣的情況,只能修改PHP的設定值了。不過建議不要直接修改PHP.ini,這樣會延長所有PHP執(zhí)行的最大時間。簡單的方法就是使用init_set函數(shù),以下的代碼把PHP最大執(zhí)行時間設定為180秒。ini_set('max_execution_time', '180');同時可以使用ini_get把原來設置的max_execution_time保存下來,在進行完操作時回復原來的設定值。