如果 simplexml_load_file 加载时间太长和/或无法访问(偶尔带有 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 的好处是您可以对请求以及如何处理响应进行真正细粒度的控制。
关于php - 如何中断耗时过长的 PHP 函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22412515/