本文目錄一覽:
- 1、微信會話5分鐘超時提醒用php怎麼做
- 2、php進程超時接口返回504錯誤分析
- 3、php語言如何設置超時處理??
- 4、怎樣解決php頁面的載入超時問題?
- 5、幾種常見的PHP超時處理方法
- 6、php 關於session過期的問題
微信會話5分鐘超時提醒用php怎麼做
不能主動發信息 只有當用戶請求某一內容 比如
1登錄 你獲得一個時間點 。。。
2存入memcache 或者數據庫什麼的。。 當然session 是最好做的。。 寫個session生存周期就行。。
3用戶下一步操作 跟上一步操作的時間差 判斷一下就行。。
php進程超時接口返回504錯誤分析
在一次接口測試中,發現返回的http 504 time out 的錯誤,然後查看了php-fpm的錯誤日誌,發現了如下錯誤
從表現上看,是php進程超時導致的進程被kill了,那麼這個超時時間以及kill的機制是跟哪些參數有關呢,這裡系統這裡一下。
Nginx服務一般因為php的錯誤或者超時會有兩種錯誤碼502 bad Gateway 或者 504 Gateway Time-out
一種情況是php產生了語法錯誤,比如循環調用、變量作用域錯誤、方法不存在等,如果開啟錯誤日誌輸出的話,這種錯誤在php-fpm的錯誤日誌中是可以看到調用棧信息的。
另外一種情況可能就是超時引起的php-fpm主動kill的情況,在php.ini和php.fpm中有兩個配置項,用來管理php腳本的最大執行時間
當php腳本的執行時間超過這個時間時,PHP-FPM不只會終止腳本的執行,還會終止執行腳本的Worker進程。所以Nginx會發現與自己通信的連接斷掉了,就會返回給客戶端502錯誤。
以頂部的錯誤為例,當報502錯誤是,nginx的errorlog中有如下日誌,:
所以只需將這兩項的值調大一些就可以讓PHP腳本不會因為執行時間長而被終止了。request_terminate_timeout可以覆蓋max_execution_time,
所以如果不想改全局的php.ini,那隻改PHP-FPM的配置就可以了。
此外要注意的是Nginx的upstream模塊中的max_fail和fail_timeout兩項。這兩個配置表示在fail_timeout事件內,如果fail的測試達到max_fail,那麼在接下來的fail_timeout時間內,Nginx都會認為上游服務器掛掉了,都會返回502錯誤。
所以可以將max_fail調大一些,將fail_timeout調小一些。
PHP-FPM設置的腳本最大執行時間已經夠長了,但執行耗時PHP腳本時,發現Nginx報錯從502變為504了。這是為什麼呢?
因為我們修改的只是PHP的配置,Nginx中也有關於與上游服務器通信超時時間的配置
以Nginx超時時間為90秒,PHP-FPM超時時間為300秒為例,報504 Gateway Timeout錯誤時的Nginx錯誤訪問日誌如下:
調高這三項的值(主要是read和send兩項,默認不配置的話Nginx會將超時時間設為60秒)之後,504錯誤也解決了。
而且這三項配置可以配置在http、server級別,也可以配置在location級別。擔心影響其他應用的話,就配置在自己應用的location中吧。
要注意的是factcgi_connect/read/send_timeout是對FastCGI生效的,而proxy_connect/read/send_timeout是對proxy_pass生效的。
參考鏈接: 感謝分享!
php語言如何設置超時處理??
set_time_limit — 限制最大的執行時間
set_time_limit
(PH3 , PHP4)
set_time_limit — 限制最大的執行時間
語法 : void set_time_limit (int seconds)
說明 :
設定一個程式所允許執行的秒數,如果到達限制的時間,程式將會傳回錯誤。它預設的限制時間是30秒,max_execution_time的值定義在結構檔案中(在PHP3中叫做php3.ini,在PHP4則叫做php.ini),如果將秒數設為0,表示無時間上的限制。
當呼叫此函式時,set_time_limit( )會從零重新開始計算最長執行的時間,也就是說,如果最長執行時間為預設的30秒,而在呼叫此函式set_time_limit(20)之前已花了25秒來執行程式,則程式最長執行的時間將會是45秒。
注意 : 當PHP是執行在安全模式時,set_time_limit( )將不會有結果,除非是關閉安全模式或是修改結構檔案中(在PHP3中叫做php3.ini,在PHP4則叫做php.ini)的時間限制。
怎樣解決php頁面的載入超時問題?
當PHP頁面處理大事務時,頁面往往會發生超時的錯誤,我解決此問題的方法如下:1.優化程序代碼:這種方法可能有時立竿見影,但對一些已經很優化或者第三方開發的程序,可能用處不大,但我個人覺得這個辦法還是應該優先考慮,這個一個優秀程序員必需有的工作美德。2.對多個任務進行拆分:對於一些程序,可能問題並不出現在代碼效率上,如Paypal的SOAP調用,大量時間花費在網絡的數據傳遞上了,(此問題在Web Services的遠程調用時經常發生),我們當然不能等將來網速的提高來解決這個問題。其實我們可以查看一下在一個POST動作中是否包含了多個任務,如付費、發Email、發貨等等。如是這樣其實可以對這些任務進行拆分,把這個工作拆分成多個子工作來實現。如執行完付費任務時,使用PHP的Header函數重定向到發送Email的頁面,完成後再定向到其他頁面,採用redirect頁面的方式來接力地完成任務。3.進行PHP設定值的修改如果以上兩種方法仍然無法解決,代碼已經最優話,同時只有一個單任務的工作需要完成。針對這樣的情況,只能修改PHP的設定值了。不過建議不要直接修改PHP.ini,這樣會延長所有PHP執行的最大時間。簡單的方法就是使用init_set函數,以下的代碼把PHP最大執行時間設定為180秒。ini_set(‘max_execution_time’, ‘180’);同時可以使用ini_get把原來設置的max_execution_time保存下來,在進行完操作時回復原來的設定值。
幾種常見的PHP超時處理方法
【Web服務器超時處理】
[ Apache ]
一般在性能很高的情況下,缺省所有超時配置都是30秒,但是在上傳文件,或者網絡速度很慢的情況下,那麼可能觸發超時操作。
目前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
php 關於session過期的問題
不會的,session不會永遠不過期的。
無論你怎樣創建session,session都不會永遠不過期。
服務器會把長時間沒有活動的Session從服務器內存中清除,此時Session便失效。一般情況下Session的默認失效時間為20分鐘。
原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-hant/n/193913.html