DOMDocument :: load()超时

时间:2014-02-01 11:41:09

标签: php xml timeout domdocument

我正在使用DOMDocument::load()从网址加载XML文件:

$doc = new DOMDocument();
$doc->load("http://url_of_some_xml_file");

如果URL加载时间超过X秒,是否有办法在定义的超时后中断或停止加载?

如果使用DOMDocument::load()无法做到这一点,还有其他方法可以设置从URL加载XML的超时时间吗?

2 个答案:

答案 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

可以是一种在不修改应用程序代码的情况下增加超时的简单方法,但这也会影响使用套接字的其他流上下文。