php - 如何中断耗时过长的 PHP 函数?

标签 php xml windows function

如果 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/

相关文章:

php - 如何使用 IF 命令在表格中显示不同的信息?

php - 数据库表代码的目录更新

c# - 如何删除 Windows Phone 8.1 应用程序中的动态磁贴标题?

sql - 使用 T-SQL 对 XML 文档进行聚合查询

java - 在 ListView 中选择一行

mysql - BitNami WordPress 安装搞砸了 ApacheFriends XAMPP 控制面板

c# - 拆分逗号分隔的字符串 5

php - 在 C 中执行和存储命令的结果

php - 使用正则表达式通过php过滤xpath中的属性

c# - 预启动任务构建以退出代码 1 终止