我打电话了一系列使用链接file_get_contents()
在一个循环的方法。 每条链路可以采取超过15分钟来处理。 现在,我担心PHP的是否file_get_contents()
有一个超时时间?
如果是的话,它就会超时与呼叫并移动到下一个环节。 我不想打电话给下一环节事先没有一个整理。
所以,请告诉我,是否file_get_contents()
有一个超时时间。 它包含的文件file_get_contents()
被设置为set_time_limit()
为零(无限制)。
默认超时由下式定义default_socket_timeout
INI设定 ,这是60秒。 你也可以改变它的飞行:
ini_set('default_socket_timeout', 900); // 900 Seconds = 15 Minutes
设置超时的另一种方法,是使用stream_context_create
,设置超时时间为HTTP上下文选项中的HTTP流包装中使用:
$ctx = stream_context_create(array('http'=>
array(
'timeout' => 1200, //1200 Seconds is 20 Minutes
)
));
echo file_get_contents('http://example.com/', false, $ctx);
作为@diyism提到,“default_socket_timeout,stream_set_timeout和stream_context_create超时是每行的所有超时的读/写,而不是整个连接超时。”而由@stewe最多的回答使我失败。
作为替代使用file_get_contents
,你可以随时使用curl
带超时。
因此,这里的是调用链接工作的工作代码。
$url='http://example.com/';
$ch=curl_init();
$timeout=5;
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_TIMEOUT, $timeout);
curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, $timeout);
$result=curl_exec($ch);
curl_close($ch);
echo $result;
值得注意的是,如果在飞行中改变default_socket_timeout,它可能是你以后的file_get_contents呼吁恢复它的价值有用:
$default_socket_timeout = ini_get('default_socket_timeout');
....
ini_set('default_socket_timeout', 10);
file_get_contents($url);
...
ini_set('default_socket_timeout', $default_socket_timeout);
因为当我改变我的php.ini在我的主机我工作:
; Default timeout for socket based streams (seconds)
default_socket_timeout = 300