限定頁面執行時間,請求超時拋出異常或提示
方案一:
1.修改php.ini配置文件 max_execution_time = 30 ,限定頁面請求時間,默認30秒;
方案二:
1.set_time_limit— 設置腳本最大執行時間,函數沒有返回值
設置允許腳本運行的時間,單位為秒。如果超過了此設置,腳本返回一個致命的錯誤。默認值為30秒,或者是在php.ini的max_execution_time被定義的值,如果此值存在。
當此函數被調用時,set_time_limit()會從零開始重新啟動超時計數器。換句話說,如果超時默認是30秒,在腳本運行了了25秒時調用set_time_limit(20),那麽,腳本在超時之前可運行總時間為45秒。
當你的頁面有大量數據時,建議使用set_time_limit()來控制運行時間,配置該頁最久執行時間。
設定一個程式所允許執行的秒數,如果到達限制的時間,程式將會傳回錯誤,時間是秒單位。
php.ini:它預設的限制時間是30秒,max_execution_time的值定義在結構檔案中,如果將秒數設為0,表示無時間上的限制,修改後重新啟動apache/nginx服務器
eg: php代碼:set_time_limit(800);
這個函數指定了當前所在php腳本的最大執行時間為800秒,實際上最大執行時間=php.ini裏的max_execution_time數值 - 當前腳本已經執行的時間 + 設定值
假如php.ini裏的max_execution_time=30,當前腳本已經執行5秒,則:
最大執行時間=30-5+800=825秒
註意:當php運行於安全模式時,此功能不能生效。除了關閉安全模式或改變php.ini中的時間限制,沒有別的辦法,當運行超過設定時間會返回一個致命錯誤
方案三:TP5框架配合set_time_limit()函數方案
使用tp框架行為擴展配合set_time_limit()函數實現,該方法是在每個接口請求時,都先執行set_time_limit(),目前這種方法超時程序不會停止執行(windows下),但會返回一致命錯誤。
1.行為定義,定義一個行為類命名為Be.php,註意命名空間,類文件路徑要放對
<?php namespace app\index\behavior; class Be { public function actionBegin(&$params) { $bool = set_time_limit(5); //$bool = ini_set ( ‘set_time_limit‘ , 5 ); } public function appEnd(&$params) { } }
2.行為定義完成後,就需要綁定到某個標簽位置才能生效,否則是不會執行的。可以在APP_PATH
目錄下面或者模塊的目錄下面定義tags.php
文件來統一定義行為,定義如下:
<?php // 應用行為擴展定義文件 return [ // 應用初始化 ‘app_init‘ => [], // 應用開始 ‘app_begin‘ => [], // 模塊初始化 ‘module_init‘ => [], // 操作開始執行 ‘action_begin‘ => [ ‘app\\index\\behavior\\Be‘, ], // 視圖內容過濾 ‘view_filter‘ => [], // 日誌寫入 ‘log_write‘ => [], // 應用結束 ‘app_end‘ => [], ];
限定頁面執行時間,請求超時拋出異常或提示