exit() 時或之後還能繼續執行php程式碼的幾種辦法
這個是很早以前公司群討論的一個話題,於是做了個總結
1.解構函式 __destruct()
點評:魔術方法一向逼格高,它還有個基友__construct()
2.register_shutdown_function()
點評:這個函式屬於回馬槍的型別,藝名:回撥函式。最好在指令碼開始時註冊,如果有記日誌或者xhprof等效能分析等有一定耗時的程式碼,可在這個函式中定義回撥去執行,可提高客戶端相應時間。
⚠:函式可多次註冊,回撥時候會安順序進行
3.fastcgi_finish_request()
點評:這個函式需要執行在Fastcgi的模式下,php-fpm會提供這個方法來使用,所以在一定程度上會提高客戶端的響應時間,在響應結束後會繼續執行後面的程式碼,以達到非同步的效果。
<?php
echo '我是會輸出的';
file_put_content('./zb.txt', date('Y-m-d H:i:s')."我是來記日誌的\n", FILE_APPEND);
fastcgi_finish_request();
echo '我是不會輸出的';
sleep(5);
file_put_content('./zb.txt', date('Y-m-d H:i:s')."來我又來記日誌了\n", FILE_APPEND);
?>
sleep(5)用來模擬耗時的操作,執行程式碼會發現,只輸出了第一個
echo的內容,看日誌也會看到記了兩個log。
fastcgi_finish_request()是七傷拳傷人先傷己,後面來講講怎麼傷己的。
1.如果不是php-fpm的模式執行php程式碼,執行這個函式會報錯,建議補上:
if (!function_exists("fastcgi_finish_request")) {
function fastcgi_finish_request() {}
}
2.由於Fastcgi的程式數是有限的,正在非同步處理的操作會佔著一個php-cgi程式,會導致無法處理新的請求,假設正好此時併發訪問量突增,新的請求將沒有php-cgi去處理,此時就
Nginx伺服器會出現:
3.這個函式後面如果執行的東西太耗時,建議看情況調大php.ini 的max_execution_time
(預設30s) 設定,或者set_time_limit(0)
一下,這樣當前程式執行就不會超時了。
未完待續,如果你還有其他辦法記得和我交流。謝謝
相關文章
- 瀏覽器退出之後php還會繼續執行麼?瀏覽器PHP
- java中異常丟擲後程式碼還會繼續執行嗎Java
- php返回資料後如何讓程式繼續執行其它操作PHP
- 你的程式碼或許漂亮,但我的程式碼能執行
- Win8無法執行魔獸爭霸3的幾種辦法
- 主執行緒等待所有其他執行緒執行完畢,然後再繼續執行主執行緒的邏輯,有以下幾種方法可以實現:執行緒
- nvidia安裝程式無法繼續的解決辦法
- PHP執行環境之IIS FastCGI 程式意外退出解決辦法PHPAST
- AI 全面入侵,程式設計師到了 2040 年還能繼續敲程式碼嗎?AI程式設計師
- 兄弟們還在繼續寫php嗎?PHP
- 以前編寫好能夠正常執行的 SAP UI5 程式碼,幾個月後忽然不能執行了該怎麼辦?UI
- Jquery ajax載入等待執行結束再繼續執行下面程式碼操作jQuery
- workerman / 小談PHP中的幾種執行模式PHP模式
- Linux 讓程式在後臺可靠執行的幾種方法Linux
- Windows批處理 呼叫程式後 不等待子程式 父程式繼續執行命令Windows
- 疫情過後,遠端辦公軟體還會繼續普及嗎?
- php防盜鏈幾種程式碼PHP
- 如何在JavaScript中實現某個方法執行超時後則繼續執行其它方法?JavaScript
- Linux 技巧:讓程式在後臺可靠執行的幾種方法Linux
- Linux 下讓程式在後臺可靠執行的幾種方法Linux
- 執行轉換時如何讓Kettle記錄錯誤並繼續執行?——記一種解決方案
- Java多種方法實現等待所有子執行緒完成再繼續執行Java執行緒
- Bitmap拉伸後出現鋸齒的幾種解決辦法
- 計算php程式執行時間的程式PHP
- 內層程式中發生異常後,不會繼續執行外層程式的語句
- js呼叫後臺程式碼的幾種方法JS
- 用CMD執行時Java,出現亂碼的解決辦法Java
- Thread 中的 join() 方法的作用是呼叫執行緒等待該執行緒執行完後,再繼續執行thread執行緒
- php直播原始碼,PHP也能非同步和並行執行PHP原始碼非同步並行
- php後臺定時執行任務PHP
- 行行AI直播:OpenAI管理層“爆炸”GPTs的故事還能繼續?OpenAIGPT
- PHP多程式並行執行php指令碼PHP並行指令碼
- 雲伺服器客戶端斷開後,如何保持程式繼續執行呢?伺服器客戶端
- java 多執行緒之使用 interrupt 停止執行緒的幾種方法Java執行緒
- 解決找不到steam_api64.dll無法繼續執行程式碼的問題API行程
- ELF PHP 可執行程式執行後載入重型指令碼的過程PHP行程指令碼
- 利用 PHP7 的 OPcache 執行 PHP 程式碼PHPopcache
- 奧運會結束了,生活還要繼續,工作還要繼續...