我正在使用DOMDocument::load()
从网址加载XML文件:
$doc = new DOMDocument();
$doc->load("http://url_of_some_xml_file");
如果URL加载时间超过X秒,是否有办法在定义的超时后中断或停止加载?
如果使用DOMDocument::load()
无法做到这一点,还有其他方法可以设置从URL加载XML的超时时间吗?
答案 0 :(得分:3)
您可以使用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");
答案 1 :(得分:1)
除了@thw' s excellent answer通过创建新的Steam上下文设置timout选项之外,我发现默认流上下文使用php.ini
default_socket_timeout
设置作为它的超时。
像这样更改php.ini
:
; Increase from the default of 60 seconds
default_socket_timeout = 120
可以是一种在不修改应用程序代码的情况下增加超时的简单方法,但这也会影响使用套接字的其他流上下文。