1. 程式人生 > >限定頁面執行時間,請求超時拋出異常或提示

限定頁面執行時間,請求超時拋出異常或提示

color window index 運行 計數 返回 tag 指定 行為

方案一:

  1.修改php.ini配置文件 max_execution_time = 30 ,限定頁面請求時間,默認30秒;

方案二:

  1.set_time_limit設置腳本最大執行時間,函數沒有返回值

  設置允許腳本運行的時間,單位為秒。如果超過了此設置,腳本返回一個致命的錯誤。默認值為30秒,或者是在php.inimax_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‘      => [],
];

限定頁面執行時間,請求超時拋出異常或提示