php超時時間說明

一,http請求超時時間

可能出現的場景:php

1,curl進程運行了一個世紀還木結束,curl的時候設置了超時時間 --connect-timeout 1000nginx

2,operation timed out after 1000 milliseconds with 0 bytes receivedapache

3,connect() timed out!瀏覽器

wget對超時時間, 是有分階段的, 好比說請求的超時, 傳輸的超時,一樣HTTP請求有兩個超時時間:一個是鏈接超時時間,另外一個是數據傳輸的最大容許時間,出現問題就要看是哪一個超時時間出問題了。安全

curl命令行

鏈接超時時間用 --connect-timeout 參數來指定,數據傳輸的最大容許時間用 -m 參數來指定,時間是毫秒服務器

例如:app

curl --connect-timeout 10 -m 20 "http://***"curl

鏈接超時的話,出錯提示形如:函數

curl: (28) connect() timed out!php-fpm

數據傳輸的最大容許時間超時的話,出錯提示形如:

curl: (28) Operation timed out after 2000 milliseconds with 0 bytes received

使用PHP的curl_init

<?php // create a new cURL resource $ch = curl_init(); // set URL and other appropriate options curl_setopt($ch, CURLOPT_URL, "http://www.example.com/"); curl_setopt($ch, CURLOPT_HEADER, 0);

//鏈接超時時間 curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 1000);

//數據傳輸的最大容許時間 curl_setopt($ch, CURLOPT_TIMEOUT, 1000); // grab URL and pass it to the browser curl_exec($ch); // close cURL resource, and free up system resources curl_close($ch);

//使用curl_error($ch)查看錯誤的詳情 var_dump(curl_error($ch)); 

二,頁面執行時間

當你的頁面有大量數據時,建議使用set_time_limit()來控制運行時間,配置該頁最久執行時間。

設定一個程式所容許執行的秒數,若是到達限制的時間,程式將會傳回錯誤,時間是秒單位。

php.ini:它預設的限制時間是30秒,max_execution_time的值定義在結構檔案中,若是將秒數設爲0,表示無時間上的限制,修改後從新啓動apache/nginx服務器

php代碼:set_time_limit(800);

這個函數指定了當前所在php腳本的最大執行時間爲800秒,實際上最大執行時間=php.ini裏的max_execution_time數值 - 當前腳本已經執行的時間 + 設定值

假如php.ini裏的max_execution_time=30,當前腳本已經執行5秒,則:

最大執行時間=30-5+800=825秒。

 

注意 : 當PHP是執行在安全模式時,set_time_limit( )將不會有結果,除非是關閉安全模式或是修改結構檔案中的時間限制。

三,php長鏈接

若是咱們須要一個腳本持續的運行,那麼咱們就要經過php長鏈接的方式,來達到運行目的。經過 set_time_limit 來設置一個腳本的執行時間爲無限長;而後使用 flush() 和 ob_flush() 來清除服務器緩衝區,隨時輸出腳本的返回值。

以下面這段腳本:

<?php header("Content-Type: text/plain"); set_time_limit(0); $infoString = "Hello World" . "\n"; while( isset($infoString) ) { echo $infoString; flush(); ob_flush(); sleep(5); } ?>

當咱們執行後,每隔5秒鐘,咱們會獲得一行 Hello World ,若是不按中止按鈕,瀏覽器會不停的一行一行繼續加載。

經過這一方法,咱們能夠完成不少功能,例如機器人爬蟲、即時留言板等程序。

若是要中止運行只能重啓php-fpm:

查看php-fpm進程數:

ps aux | grep -c php-fpm

查看運行內存

/usr/bin/php  -i|grep mem

重啓php-fpm

/etc/init.d/php-fpm restart

相關文章
相關標籤/搜索