Does file_get_contents() have a timeout setting?
我在循环中使用
如果是,它将超时通话并转到下一个链接。 如果没有事先完成,我不想打电话给下一个链接。
那么,请告诉我
默认超时由
1 |
设置超时的另一种方法是使用
1 2 3 4 5 6 7 | $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的最佳答案让我失望。
作为使用
所以这是一个适用于调用链接的工作代码。
1 2 3 4 5 6 7 8 9 10 11 12 | $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之后恢复其值可能很有用:
1 2 3 4 5 6 | $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时工作:
1 2 | ; Default timeout for socket based streams (seconds) default_socket_timeout = 300 |