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)
一下,這樣當前程式執行就不會超時了。
未完待續,如果你還有其他辦法記得和我交流。謝謝
相關文章
- java中異常丟擲後程式碼還會繼續執行嗎Java
- php返回資料後如何讓程式繼續執行其它操作PHP
- 主執行緒等待所有其他執行緒執行完畢,然後再繼續執行主執行緒的邏輯,有以下幾種方法可以實現:執行緒
- workerman / 小談PHP中的幾種執行模式PHP模式
- Linux 技巧:讓程式在後臺可靠執行的幾種方法Linux
- Jquery ajax載入等待執行結束再繼續執行下面程式碼操作jQuery
- 以前編寫好能夠正常執行的 SAP UI5 程式碼,幾個月後忽然不能執行了該怎麼辦?UI
- 兄弟們還在繼續寫php嗎?PHP
- 執行 PHP artisan migrate 時報長度錯誤的解決辦法?PHP
- 疫情過後,遠端辦公軟體還會繼續普及嗎?
- Thread 中的 join() 方法的作用是呼叫執行緒等待該執行緒執行完後,再繼續執行thread執行緒
- Java多種方法實現等待所有子執行緒完成再繼續執行Java執行緒
- Linux 後臺執行 PHP 指令碼LinuxPHP指令碼
- 利用 PHP7 的 OPcache 執行 PHP 程式碼PHPopcache
- php直播原始碼,PHP也能非同步和並行執行PHP原始碼非同步並行
- 請寫出幾種匿名自執行的寫法(至少三種)
- 用CMD執行時Java,出現亂碼的解決辦法Java
- ELF PHP 可執行程式執行後載入重型指令碼的過程PHP行程指令碼
- linux中後臺執行程式常用的幾種方法Linux行程
- php後臺定時執行任務PHP
- Linux shell:執行shell指令碼的幾種方式Linux指令碼
- 解決找不到steam_api64.dll無法繼續執行程式碼的問題API行程
- java 多執行緒之使用 interrupt 停止執行緒的幾種方法Java執行緒
- 雲伺服器客戶端斷開後,如何保持程式繼續執行呢?伺服器客戶端
- 【.NET 6】多執行緒的幾種開啟方式和程式碼演示執行緒
- 【MySQL安裝】由於找不到MSVCP120.dll,無法繼續執行程式碼MySql行程
- intellij 關閉後程式還在執行IntelliJ
- PHP 獲取程式碼執行時間和消耗的記憶體PHP記憶體
- 行行AI直播:OpenAI管理層“爆炸”GPTs的故事還能繼續?OpenAIGPT
- 你知道JavaScript的繼承有幾種寫法嗎?JavaScript繼承
- 2019 為什麼我們還會繼續使用 PHP ?PHP
- Python併發程式設計之建立多執行緒的幾種方法(二)Python程式設計執行緒
- JS 總結之原型繼承的幾種方式JS原型繼承
- git push程式碼時的‘git did not exit cleanly (exit code 1)‘問題解決Git
- 三星Galaxy Note10+或繼續用挖孔屏,還是放在中間的那種
- python:return之後的語句還會執行嗎Python
- C# 迴圈時,操作另外一個程式直到操作完成,迴圈繼續執行C#
- ls顯示前幾行或後幾行資料
- PHP處理密碼的幾種方式PHP密碼