2010-03-13 60 views
11

有時,get_file_contents花費的時間太長,會掛起整個腳本。有什麼方法可以在get_file_contents上設置超時限制,而不需要修改腳本的最大執行時間?如何在PHP中設置get_file_contents的時間限制?

編輯:

由於該文件不存在,因此花費很長時間。我收到「無法打開流:HTTP請求失敗!」錯誤。但它需要永遠。

回答

35

似乎可以在PHP> 5.2.1中通過創建與timeout option的上下文。

稍作修改例如從手冊頁:

<?php 

$opts = array('http' => 
    array(
     'method' => 'GET', 
     'timeout' => 120 
    ) 
); 

$context = stream_context_create($opts); 

$result = file_get_contents('http://example.com/get.php', false, $context); 

?> 
+1

+1:我喜歡它當人們建議使用流*(這是幾乎沒有人知道的PHP的偉大的事情之一;-()* – 2010-03-13 16:42:59

+0

謝謝...像一個魅力工作:-) – Jagira 2010-03-13 16:45:48

+0

如果指定的時間限制將會到達,函數將返回'FALSE'?所以我無法區分超時錯誤和其他所有錯誤? – 2014-12-11 09:36:48

1

你算使用ini_set和使用file_get_contents,然後後恢復的舊值之前設置"default_socket_timeout" - 如果會影響到您的代碼的其他一些地方...