php超時(shí)數(shù)據(jù) php默認(rèn)超時(shí)時(shí)間

幾種常見(jiàn)的PHP超時(shí)處理方法

【W(wǎng)eb服務(wù)器超時(shí)處理】

站在用戶的角度思考問(wèn)題,與客戶深入溝通,找到安陸網(wǎng)站設(shè)計(jì)與安陸網(wǎng)站推廣的解決方案,憑借多年的經(jīng)驗(yàn),讓設(shè)計(jì)與互聯(lián)網(wǎng)技術(shù)結(jié)合,創(chuàng)造個(gè)性化、用戶體驗(yàn)好的作品,建站類型包括:成都網(wǎng)站制作、做網(wǎng)站、企業(yè)官網(wǎng)、英文網(wǎng)站、手機(jī)端網(wǎng)站、網(wǎng)站推廣、域名注冊(cè)、雅安服務(wù)器托管、企業(yè)郵箱。業(yè)務(wù)覆蓋安陸地區(qū)。

[ Apache ]

一般在性能很高的情況下,缺省所有超時(shí)配置都是30秒,但是在上傳文件,或者網(wǎng)絡(luò)速度很慢的情況下,那么可能觸發(fā)超時(shí)操作。

目前apachefastcgiphp-fpm模式下有三個(gè)超時(shí)設(shè)置:

fastcgi超時(shí)設(shè)置:

修改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

php進(jìn)程超時(shí)接口返回504錯(cuò)誤分析

在一次接口測(cè)試中,發(fā)現(xiàn)返回的http 504 time out 的錯(cuò)誤,然后查看了php-fpm的錯(cuò)誤日志,發(fā)現(xiàn)了如下錯(cuò)誤

從表現(xiàn)上看,是php進(jìn)程超時(shí)導(dǎo)致的進(jìn)程被kill了,那么這個(gè)超時(shí)時(shí)間以及kill的機(jī)制是跟哪些參數(shù)有關(guān)呢,這里系統(tǒng)這里一下。

Nginx服務(wù)一般因?yàn)閜hp的錯(cuò)誤或者超時(shí)會(huì)有兩種錯(cuò)誤碼502 bad Gateway 或者 504 Gateway Time-out

一種情況是php產(chǎn)生了語(yǔ)法錯(cuò)誤,比如循環(huán)調(diào)用、變量作用域錯(cuò)誤、方法不存在等,如果開(kāi)啟錯(cuò)誤日志輸出的話,這種錯(cuò)誤在php-fpm的錯(cuò)誤日志中是可以看到調(diào)用棧信息的。

另外一種情況可能就是超時(shí)引起的php-fpm主動(dòng)kill的情況,在php.ini和php.fpm中有兩個(gè)配置項(xiàng),用來(lái)管理php腳本的最大執(zhí)行時(shí)間

當(dāng)php腳本的執(zhí)行時(shí)間超過(guò)這個(gè)時(shí)間時(shí),PHP-FPM不只會(huì)終止腳本的執(zhí)行,還會(huì)終止執(zhí)行腳本的Worker進(jìn)程。所以Nginx會(huì)發(fā)現(xiàn)與自己通信的連接斷掉了,就會(huì)返回給客戶端502錯(cuò)誤。

以頂部的錯(cuò)誤為例,當(dāng)報(bào)502錯(cuò)誤是,nginx的errorlog中有如下日志,:

所以只需將這兩項(xiàng)的值調(diào)大一些就可以讓PHP腳本不會(huì)因?yàn)閳?zhí)行時(shí)間長(zhǎng)而被終止了。request_terminate_timeout可以覆蓋max_execution_time,

所以如果不想改全局的php.ini,那只改PHP-FPM的配置就可以了。

此外要注意的是Nginx的upstream模塊中的max_fail和fail_timeout兩項(xiàng)。這兩個(gè)配置表示在fail_timeout事件內(nèi),如果fail的測(cè)試達(dá)到max_fail,那么在接下來(lái)的fail_timeout時(shí)間內(nèi),Nginx都會(huì)認(rèn)為上游服務(wù)器掛掉了,都會(huì)返回502錯(cuò)誤。

所以可以將max_fail調(diào)大一些,將fail_timeout調(diào)小一些。

PHP-FPM設(shè)置的腳本最大執(zhí)行時(shí)間已經(jīng)夠長(zhǎng)了,但執(zhí)行耗時(shí)PHP腳本時(shí),發(fā)現(xiàn)Nginx報(bào)錯(cuò)從502變?yōu)?04了。這是為什么呢?

因?yàn)槲覀冃薷牡闹皇荘HP的配置,Nginx中也有關(guān)于與上游服務(wù)器通信超時(shí)時(shí)間的配置

以Nginx超時(shí)時(shí)間為90秒,PHP-FPM超時(shí)時(shí)間為300秒為例,報(bào)504 Gateway Timeout錯(cuò)誤時(shí)的Nginx錯(cuò)誤訪問(wèn)日志如下:

調(diào)高這三項(xiàng)的值(主要是read和send兩項(xiàng),默認(rèn)不配置的話Nginx會(huì)將超時(shí)時(shí)間設(shè)為60秒)之后,504錯(cuò)誤也解決了。

而且這三項(xiàng)配置可以配置在http、server級(jí)別,也可以配置在location級(jí)別。擔(dān)心影響其他應(yīng)用的話,就配置在自己應(yīng)用的location中吧。

要注意的是factcgi_connect/read/send_timeout是對(duì)FastCGI生效的,而proxy_connect/read/send_timeout是對(duì)proxy_pass生效的。

參考鏈接: 感謝分享!

PHP提交表單超時(shí)的問(wèn)題

出現(xiàn)這種情況是由于您的網(wǎng)站超過(guò)了iis限制造成的

由于2003的操作系統(tǒng)在提示IIS過(guò)多時(shí)并非像2000系統(tǒng)提示“鏈接人數(shù)過(guò)多”,而是提示"Service Unavailable",出現(xiàn)這種情況是由于網(wǎng)站超過(guò)了系統(tǒng)資源限制造成的,主要是程序占用資源太多。

比如同樣是100人在線的論壇,雷傲論壇所占的資源就是PW論壇所占資源的10倍以上;另外,一些死循環(huán)程序,或者不優(yōu)化的程序都會(huì)占用太多的系統(tǒng)資源,而系統(tǒng)資源明顯是有限的。不過(guò)WINDOWS2003的操作系統(tǒng),各網(wǎng)站之間是以獨(dú)立進(jìn)程運(yùn)行的,不會(huì)相互影響。

如果一個(gè)網(wǎng)站的程序占資源太多或者發(fā)生太多的錯(cuò)誤,系統(tǒng)日志就會(huì)提示:“應(yīng)用程序池 'xxx' 被自動(dòng)禁用,原因是為此應(yīng)用程序池提供服務(wù)的進(jìn)程中出現(xiàn)一系列錯(cuò)誤,或者提示:應(yīng)用程序池 'xxx' 超過(guò)了其作業(yè)限制設(shè)置。這時(shí),訪問(wèn)這個(gè)網(wǎng)站就會(huì)提示:Service Unavailable。一般系統(tǒng)會(huì)在30秒左右恢復(fù)正常,多刷新幾次就能正常訪問(wèn)了。

另外,如果你的網(wǎng)站當(dāng)前訪問(wèn)人數(shù)過(guò)多,超過(guò)了系統(tǒng)的iis連接數(shù)限制,也會(huì)出現(xiàn)Service Unavailable的提示(win2k主機(jī)下出現(xiàn)連接過(guò)多就會(huì)提示:連接過(guò)多,請(qǐng)稍后再試;而win2003的主機(jī)剛直接提示:Service Unavailable)

怎樣解決php頁(yè)面的載入超時(shí)問(wèn)題?

當(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');同時(shí)可以使用ini_get把原來(lái)設(shè)置的max_execution_time保存下來(lái),在進(jìn)行完操作時(shí)回復(fù)原來(lái)的設(shè)定值。

PHP中幾種常見(jiàn)的超時(shí)處理全面總結(jié)

具體代碼如下:

?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 獨(dú)特的語(yǔ)法混合了C、Java、Perl以及PHP自創(chuàng)的語(yǔ)法。

它可以比CGI或者Perl更快速地執(zhí)行動(dòng)態(tài)網(wǎng)頁(yè)。用PHP做出的動(dòng)態(tài)頁(yè)面與其他的編程語(yǔ)言相比,PHP是將程序嵌入到HTML(標(biāo)準(zhǔn)通用標(biāo)記語(yǔ)言下的一個(gè)應(yīng)用)文檔中去執(zhí)行,

執(zhí)行效率比完全生成HTML標(biāo)記的CGI要高許多;

PHP還可以執(zhí)行編譯后代碼,編譯可以達(dá)到加密和優(yōu)化代碼運(yùn)行,使代碼運(yùn)行更快。

分享名稱:php超時(shí)數(shù)據(jù) php默認(rèn)超時(shí)時(shí)間
文章起源:http://muchs.cn/article14/docsode.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供定制網(wǎng)站標(biāo)簽優(yōu)化、ChatGPT、網(wǎng)站改版、外貿(mào)建站關(guān)鍵詞優(yōu)化

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)

網(wǎng)站優(yōu)化排名