如果要花费太长时间加载和/或无法访问(有时带有xml的站点关闭),我想停止simplexml_load_file,这是因为我不希望自己的站点不启动时完全滞后。
我尝试自己做点实验,但没有成功。
提前非常感谢您的帮助!
在指定的时间后不能退出任意函数。相反,您可以尝试首先加载URL的内容-如果成功,则继续处理脚本的其余部分。
有几种方法可以实现此目的。最简单的方法是file_get_contents()
与流上下文集一起使用:
$context = stream_context_create(array('http' => array('timeout' => 5)));
$xmlStr = file_get_contents($url, FALSE, $context);
$xmlObj = simplexml_load_string($xmlStr);
或者,您可以simplexml_load_file()
通过libxml_set_streams_context()
函数使用流上下文:
$context = stream_context_create(array('http' => array('timeout' => 5)));
libxml_set_streams_context($context);
$xmlObj = simplexml_load_file($url);
您可以将其包装为一个不错的小功能:
function simplexml_load_file_from_url($url, $timeout = 5)
{
$context = stream_context_create(
array('http' => array('timeout' => (int) $timeout))
);
$data = file_get_contents($url, FALSE, $context);
if(!$data) {
trigger_error("Couldn't get data from: '$url'", E_USER_NOTICE);
return FALSE;
}
return simplexml_load_string($data);
}
另外,您可以考虑使用cURL(默认情况下可用)。使用cURL的好处是您可以对请求以及如何处理响应进行非常精细的控制。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句