最近最近在學習些PoC,發現大部分PoC都會有這樣一句ini_set('default_socket_timeout', 5) ,意思就是設置default_socket_timeout這個配置參數為5。不知道這個配置是什么意思,到官網上查了下,給出的解釋也很簡單 Default timeout (in seconds) for socket based streams。意思是socket流的超時時間(參數單位為秒)。自己想試下這個的效果,但是搜了半天,國內國外都沒有個可以體現這個參數意義的例子。於是隨便找了個簡單的代碼試了下,代碼如下:
\<\?php
$url =
'http://www.cnblogs.com/Zjmainstay/archive/2012/03/08/PHP_FUN
CTION_file_get_contents.html';
ini_set('default_socket_timeout', 3);
if($data = file_get_contents($url)) {
echo $data;
}else {
echo 'Timeout';
}
\?\>
意思很簡單,就是獲取一個頁面,socket流的時間設置為3秒,效果如下

后面我將default_socket_timeout的時間改為0.1秒,即ini_set('default_socket_timeout', 0.1),然后訪問,效果如下

在寫這篇文章時,突然發現原來PHP官網上有關於這個設置的示例代碼,大家和我的實驗對比着看吧。
Test script:
---------------
php -r 'ini_set("default_socket_timeout", -1); echo file_get_contents("http://www.google.com");'
Expected result:
----------------
print the html of google page.
Actual result:
--------------
PHP Warning: file_get_contents(http://www.google.com): failed to open stream:
Operation now in progress in Command line code on line 1
PHP Stack trace:
PHP 1. {main}() Command line code:0
PHP 2. file_get_contents() Command line code:1
通過搜索的解釋和實驗測試,我得到對於這個設置的結論是,default_socket_timeout是socket流的超時參數,即socket流從建立到傳輸再到關閉整個過程必須要在這個參數設置的時間以內完成,如果不能完成,那么PHP將自動結束這個socket並返回一個警告。類似的一個PHP配置是connection_timeout,不過connection_timeout是指保持連接的時間超時,不包括創建和銷毀連接。
轉自:http://blog.csdn.net/senlin1202/article/details/50800421