2012-04-17 106 views
1

我正在使用file_get_contents,我想要define a timeout。我試圖通過創建這樣的上下文來實現它:file_get_contents timeout

$timeout = array('http' => array('timeout' => 6)); 

$context = stream_context_create($timeout); 

$xml = file_get_contents($hostName,false,$context); 

但它忽略了這個值。

+2

你怎麼能說它忽略了超時設置? – hakre 2012-04-17 10:13:50

+1

在5.2.1中增加'timeout',檢查你的PHP版本。 – joar 2012-04-17 10:17:35

+0

我給timeout賦了一個小值,儘管這個file_get_contents返回了好結果 – user1093588 2012-04-17 10:51:24

回答

1

由於PHP 5.2.1您可以指定timeout上下文選項,並通過上下文的file_get_contents()

ini_set('default_socket_timeout', 120); 
+0

我alreadey試過這個 ini_set('default_socket_timeout',5); $ xml = file_get_contents($ hostName); 但它不起作用 – user1093588 2012-04-17 10:30:28

1

因爲我還不能發表評論(和編輯或標記問題(如重複(?) )可能不是在這種情況下比較合適的),我要補充的後續問題,並作爲回答的評論:

  • 當你說:

    我分配值較小超時和儘管這個的file_get_contents的返回了良好的效果

你的意思是,即使你設置的,比如說超時1秒,file_get_contents()函數需要更多的那並且不超時?您是否有任何低級監控可用於區分「連接」和「讀取」數據所需的時間?

  • 因爲隨着FANIS在他回答說質疑「PHP file_get_contents ignoring timeout?」,如果你使用「的file_get_contents()」(而不是下級socket函數),時間爲「連接」到遠程服務器不能通過可用的ini設置或明顯的上下文條目來設置。您只設置「」讀取「超時。

(我意識到這是一個老問題,但是,我碰到了這2個在我的搜索,因爲我有同樣的問題,並認爲我應該在它們之間建立的鏈接)

2

我想默認超時時間設置爲60秒。 您可以將其更改爲您想要的值。

<?php 

$ctx=stream_context_create(array('http'=> 
    array(
     'timeout' => 30 // 30 sec 
    ) 
)); 

$conetnt = file_get_contents('http://example.com',false,$ctx); 
var_dump($conetnt); 
?>