<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          Timeout-PHPPHP 函數(shù)執(zhí)行超時(shí)控制擴(kuò)展

          聯(lián)合創(chuàng)作 · 2023-10-01 09:29

          PHP 函數(shù)執(zhí)行超時(shí)控制擴(kuò)展 (For PHP7+)

          控制PHP函數(shù)的執(zhí)行時(shí)間,超時(shí)終止執(zhí)行,支持毫秒級配置,在call_user_func()基礎(chǔ)上加了超時(shí)控制機(jī)制。

          版本 v1.0.0

          環(huán)境&依賴

          • OS: linux

          • Version: PHP 7.0.0及以上

          • SAPI: php-fpm or cli

          特性

          • 通用:函數(shù)級控制超時(shí)

          • 支持毫秒級配置

          函數(shù)

          int call_func_with_timeout(mixed callable, int interval [, array args [, mixed retval]]
          
          Parames:
          $callable array|string 調(diào)用函數(shù)名稱,普通function傳函數(shù)名,類方法傳數(shù)組:array(class|object, method)
          $interval int          超時(shí)時(shí)間,單位:ms
          $args     array        (可選)調(diào)用函數(shù)的參數(shù)數(shù)組
          $retval   mixed        (可選)調(diào)用函數(shù)的返回值,此值以引用傳入
          
          Return:
          TT_CALL_FUNCTION_SUCC: 執(zhí)行成功(未超時(shí))
          TT_CALL_FUNCTION_TIMEOUT: 執(zhí)行超時(shí)
          TT_SET_FUNCTION_CALL_INFO_ERROR: 調(diào)用函數(shù)不合法(如:類或者對象不存在)
          TT_FUNCTION_CALL_FAILURE: 調(diào)用失敗(如:方法不存在、調(diào)用私有方法等)
          TT_SET_SIGNAL_ERROR: 設(shè)置signal handler錯(cuò)誤(系統(tǒng)不支持此擴(kuò)展)
          TT_SET_TIMER_ERROR: 同上

          安裝

          git clone [email protected]:pangudashu/timeout.git
          cd timeout
          phpize
          ./configure
          make && make install
          
          add "extension=timeout.so" to php.ini

          Demo

          <?php
          
          class sync {
          
              public function send($a,$b,$c,$d){
                  sleep(2);
          
                  print_r(get_defined_vars());
          
                  return 1024;
              }
          }
          
          $sync_send_ret = null;
          $r = call_func_with_timeout(array("sync", "send"), 1200, array(1,2,3,4), $sync_send_ret);
          
          echo "sync::send() return value:" . $sync_send_ret . "\n";
          switch($r)
          {
              case TT_CALL_FUNCTION_SUCC:
                  echo 'call function success';
                  break;
              case TT_SET_FUNCTION_CALL_INFO_ERROR:
                  echo 'set function call info error';
                  break;
              case TT_FUNCTION_CALL_FAILURE:
                  echo 'call function failure';
                  break;
              case TT_SET_SIGNAL_ERROR:
                  echo 'set signal handler error';
                  break;
              case TT_SET_TIMER_ERROR:
                  echo 'set timer error';
                  break;
              case TT_CALL_FUNCTION_TIMEOUT:
                  echo 'call function timeout';
                  break;
          }
          ?>

          執(zhí)行結(jié)果:

          sync::send() return value:
          call function timeout

          如果將sleep(2)注釋掉則輸出:

          Array
          (
              [a] => 1
              [b] => 2
              [c] => 3
              [d] => 4
          )
          sync::send() return value:1024
          call function success


          瀏覽 16
          點(diǎn)贊
          評論
          收藏
          分享

          手機(jī)掃一掃分享

          編輯 分享
          舉報(bào)
          評論
          圖片
          表情
          推薦
          點(diǎn)贊
          評論
          收藏
          分享

          手機(jī)掃一掃分享

          編輯 分享
          舉報(bào)
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  sm骚逼麻豆 | 影音先锋日韩资源站 | 天天日天天色 | 伊人五月婷婷丁香大香蕉 | 天天草天天撸 |