我正在使用DOMDocument::load()从URL加载一个XML文件:
$doc = new DOMDocument();
$doc->load("http://url_of_some_xml_file");如果URL加载时间超过X秒,是否有办法在定义的超时后中断或停止加载?
如果使用DOMDocument::load()不能做到这一点,有没有其他方法可以设置从URL加载XML的超时时间?
发布于 2014-02-01 19:54:28
您可以使用libxml_set_streams_context来配置行为。HTTP stream wrapper选项包括timeout。
$options = [
'http' => [
'method' => 'GET',
'timeout' => '5'
]
];
$context = stream_context_create($options);
libxml_set_streams_context($context);
$doc = new DOMDocument();
$doc->load("http://url_of_some_xml_file");发布于 2015-09-02 23:40:26
除了@thw通过创建一个新的steam上下文来设置超时选项的excellent answer之外,我发现默认的流上下文使用default_socket_timeout的php.ini设置作为它的超时。
像这样更改您的php.ini:
; Increase from the default of 60 seconds
default_socket_timeout = 120虽然这也会影响使用套接字的其他流上下文,但这是增加超时时间而无需修改应用程序代码的一种简单方法。
https://stackoverflow.com/questions/21497561
复制相似问题