搜尋
首頁後端開發PHP問題PHP超時的設定方法有哪些

本篇文章為大家介紹一下PHP逾時的設定方法。有一定的參考價值,有需要的朋友可以參考一下,希望對大家有幫助。

PHP超時的設定方法有哪些

一、PHP文件執行逾時

(1)初始設定腳本執行時間

開啟php.ini文件,找到:

max_execution_time=30

 修改為:

max_execution_time=600

如果你沒有伺服器修改權限,可透過內建PHP腳本的方法設定逾時時間,在需要執行長時間操作的PHP檔案中加入下列程式碼:

<?php
ini_set(&#39;max_execution_time&#39;, 600);//秒为单位,自己根据需要定义

也可以透過.htaccess 檔案設定逾時時間,在檔案中加入下列程式碼:

php_value max_execution_time 600

(2)重新設定腳本執行時間,並重設計時器

#set_time_limit ( int $seconds ) : bool

#    seconds------最大的執行時間,單位為秒。如果設定為0(零),則沒有時間方面的限制。

設定允許腳本運行的時間,單位為秒。如果超過了此設置,腳本返回一個致命的錯誤。預設值為30秒,或是在php.ini的max_execution_time被定義的值,如果此值存在。

當此函數被呼叫時,set_time_limit()會從零開始重新啟動逾時計數器。換句話說,如果逾時預設是30秒,在腳本運行了25秒時呼叫 set_time_limit(20),那麼,腳本在逾時之前可執行總時間為45秒。

二、PHP Curl 請求超時

Curl 是常用的存取HTTP協定介面的lib庫,效能高,還有一些同時支援的功能等。

curl_setopt($ch, opt) 可以設定一些逾時的設置,主要包括:

a 、CURLOPT_TIMEOUT 設定CURL允許執行的最長秒數。

b、CURLOPT_TIMEOUT_MS 設定CURL允許執行的最長毫秒數。

c、 CURLOPT_CONNECTTIMEOUT 在發起連線前等待的時間,如果設定為0,則無限等待。

d、 CURLOPT_CONNECTTIMEOUT_MS 嘗試連線等待的時間,以毫秒為單位。如果設定為0,則無限等待。

e、 CURLOPT_DNS_CACHE_TIMEOUT 設定在記憶體中保存DNS資訊的時間,預設為120秒。

三、PHP Socket 請求逾時

<?php
$socket = socket_create(AF_INET, SOCK_STREAM, SOL_TCP);
socket_set_option($socket,SOL_SOCKET,SO_RCVTIMEO,array("sec"=> 1, "usec"=> 0 ) ); // 接收
socket_set_option($socket,SOL_SOCKET,SO_SNDTIMEO,array("sec"=> 3, "usec"=> 0 ) );  // 发送

雖然PHP中對fsockopen()方法有連接socket的超時參數,但是沒有類似C中的連接成功後對資料的讀寫逾時參數設定.沒關係,PHP中對stream提供了一系列的方法以防止超時。

stream_set_blocking( $fp , false )

設定資料流為阻塞模式,以防止資料沒讀完就退出

如果模式為false, 給定的socket 描述符將切換到非區塊模式, 如果為true,則切換到區塊模式. 這個效果類似於fgets() 從socket 讀的情況. 在非區塊模式fgets() 將會立即返回,而在區塊模式將等待資料滿足要求。

stream_set_timeout( $fp , 10 )

設定超時,應該在成功建立連接之後立即加上此句,後面的參數單位為秒

從封裝協議文件指針中取得報頭/元數據,返回的是一個數組,其中格式為:

Array
(
  [stream_type] => tcp_socket
  [mode] => r+
  [unread_bytes] => 0
  [seekable] =>
  [timed_out] =>
  [blocked] => 1
  [eof] =>
)

其中索引timed_out為超時信息,超時則為true,未超時則為false,我們可以籍由此來判斷socket是否超時,需要注意的是此句應該加在每次需要等待的語句之後,例如fwrite(),fread(),並且每讀一次,都要判斷一次是否超時,而對於一個連接只需一次超時設定stream_set_timeout( $fp , 10 )就可以了。

$fp = @fsockopen( $ip , $port, $errNo , $errstr, 30 );
if( !$fp )
{
  return false;
}
else
{
  stream_set_timeout( $fp , 3 ) ;
  //发送数据
  fwrite( $fp , $packet ) ;
  $status = stream_get_meta_data( $fp ) ;
  //发送数据超时
  if( $status[&#39;timed_out&#39;] )
  {
    echo "Write time out" ;
    fclose( $fp );
    return false;
  }
  //读取数据
  $buf = fread( $fp , 16 ) ;
  $status = stream_get_meta_data( $fp ) ;
  //读取数据超时
  if( $status[&#39;timed_out&#39;] )
  {
    echo "Read time out" ;
    fclose( $fp );
    return false;
  }
}

四、file_get_contents 逾時處理(封裝socket,file_put_contents類似)

從PHP5 開始,file_get_content 已經支援context 了(手冊上寫著:5.0.0 Added the context support. ),也就是說,從5.0開始,file_get_contents 其實也可以POST 資料。類似的還有,fopen(也是從PHP5開始加入context支援),file (PHP5加入支援)。

<?php
$get_opts = array(   
  &#39;http&#39;=>array(   
    &#39;method&#39; => "GET",   
    &#39;timeout&#39; => 1,//单位秒, 默认使用php.ini中default_socket_timeout的设置
   )   
);
$post_opts = array(
&#39;http&#39;=>array(   
    &#39;method&#39; => "POST",   
    &#39;timeout&#39; => 60,//单位秒, 可用ini_set(&#39;default_socket_timeout&#39;, 120);进行默认设置
    &#39;content&#39; =>  http_build_query($param_array, &#39;&#39;, &#39;&&#39;)
   )   
);
 
$opts = $get_opts;
$res = file_get_contents($url, FALSE, stream_context_create($opts)); //返回string,失败返回FALSE

五、PHP Soap 請求逾時

    ini_set(&#39;default_socket_timeout&#39;, 30); //定义响应超时为30秒
 
    try {
      $options = array(
        &#39;cache_wsdl&#39; => 0,
        &#39;connection_timeout&#39; => 5, //定义连接超时为5秒,默认php.ini中default_socket_timeout的值
      );
      libxml_disable_entity_loader(false);
      $client = new \SoapClient($url, $options);
      return $client->__soapCall($function_name, $arguments);
 
    } catch (\SoapFault $e) {
      //超时、连接不上
      if($e->faultcode == &#39;HTTP&#39;){
        throw new TimeoutException(&#39;连接或请求超时&#39;, $e->getCode());
      }
    }

soap請求也可以使用資源流context,可以將請求逾時寫到stream_context_create( )中。

try {
         $arrContextOptions=array("ssl"=>array( "verify_peer"=>false, "verify_peer_name"=>false,&#39;crypto_method&#39; => STREAM_CRYPTO_METHOD_TLS_CLIENT));
 
          //$arrContextOptions=array("http"=>array( "method"=>&#39;GET&#39;, &#39;timeout&#39;=>10));
         $options = array(
                 &#39;soap_version&#39;=>SOAP_1_2,
                 &#39;exceptions&#39;=>true,
                 &#39;trace&#39;=>1,
                 &#39;cache_wsdl&#39;=>WSDL_CACHE_NONE,
                 &#39;stream_context&#39; => stream_context_create($arrContextOptions)
         );
         $client = new SoapClient(&#39;https://url/dir/file.wsdl&#39;, $options);
     
     } catch (Exception $e) {
         echo "<h2 id="Exception-nbsp-Error">Exception Error!</h2>";
         echo $e->getMessage();
     }

推薦學習:php影片教學

#

以上是PHP超時的設定方法有哪些的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述
本文轉載於:csdn。如有侵權,請聯絡admin@php.cn刪除
酸與基本數據庫:差異和何時使用。酸與基本數據庫:差異和何時使用。Mar 26, 2025 pm 04:19 PM

本文比較了酸和基本數據庫模型,詳細介紹了它們的特徵和適當的用例。酸優先確定數據完整性和一致性,適合財務和電子商務應用程序,而基礎則側重於可用性和

PHP安全文件上傳:防止與文件相關的漏洞。PHP安全文件上傳:防止與文件相關的漏洞。Mar 26, 2025 pm 04:18 PM

本文討論了確保PHP文件上傳的確保,以防止諸如代碼注入之類的漏洞。它專注於文件類型驗證,安全存儲和錯誤處理以增強應用程序安全性。

PHP輸入驗證:最佳實踐。PHP輸入驗證:最佳實踐。Mar 26, 2025 pm 04:17 PM

文章討論了PHP輸入驗證以增強安全性的最佳實踐,重點是使用內置功能,白名單方法和服務器端驗證等技術。

PHP API率限制:實施策略。PHP API率限制:實施策略。Mar 26, 2025 pm 04:16 PM

本文討論了在PHP中實施API速率限制的策略,包括諸如令牌桶和漏水桶等算法,以及使用Symfony/Rate-limimiter之類的庫。它還涵蓋監視,動態調整速率限制和手

php密碼哈希:password_hash和password_verify。php密碼哈希:password_hash和password_verify。Mar 26, 2025 pm 04:15 PM

本文討論了使用password_hash和pyspasswify在PHP中使用密碼的好處。主要論點是,這些功能通過自動鹽,強大的哈希算法和SECH來增強密碼保護

OWASP前10 php:描述並減輕常見漏洞。OWASP前10 php:描述並減輕常見漏洞。Mar 26, 2025 pm 04:13 PM

本文討論了OWASP在PHP和緩解策略中的十大漏洞。關鍵問題包括注射,驗證損壞和XSS,並提供用於監視和保護PHP應用程序的推薦工具。

PHP XSS預防:如何預防XSS。PHP XSS預防:如何預防XSS。Mar 26, 2025 pm 04:12 PM

本文討論了防止PHP中XSS攻擊的策略,專注於輸入消毒,輸出編碼以及使用安全增強的庫和框架。

PHP接口與抽像類:何時使用。PHP接口與抽像類:何時使用。Mar 26, 2025 pm 04:11 PM

本文討論了PHP中接口和抽像類的使用,重點是何時使用。界面定義了無實施的合同,適用於無關類和多重繼承。摘要類提供常見功能

See all articles

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱工具

WebStorm Mac版

WebStorm Mac版

好用的JavaScript開發工具

DVWA

DVWA

Damn Vulnerable Web App (DVWA) 是一個PHP/MySQL的Web應用程序,非常容易受到攻擊。它的主要目標是成為安全專業人員在合法環境中測試自己的技能和工具的輔助工具,幫助Web開發人員更好地理解保護網路應用程式的過程,並幫助教師/學生在課堂環境中教授/學習Web應用程式安全性。 DVWA的目標是透過簡單直接的介面練習一些最常見的Web漏洞,難度各不相同。請注意,該軟體中

SublimeText3 英文版

SublimeText3 英文版

推薦:為Win版本,支援程式碼提示!

EditPlus 中文破解版

EditPlus 中文破解版

體積小,語法高亮,不支援程式碼提示功能

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器