缓存 PHP 简单 HTML DOM 解析器

Posted

技术标签:

【中文标题】缓存 PHP 简单 HTML DOM 解析器【英文标题】:Caching PHP Simple HTML DOM Parser 【发布时间】:2011-08-27 17:01:21 【问题描述】:

我正在使用php html DOM Parser 从外部网站提取数据。为了减少负载并加快页面渲染时间,我想缓存我提取的数据一段时间。我该怎么做?

【问题讨论】:

【参考方案1】:

我写了这个文件缓存函数,它基本上只是替换了 file_get_contents。您可以在$offset 中指定缓存的持续时间,或者使用$override 完全覆盖缓存。如果您不想使用 /tmp/,只需将该目录更改为您可以读取/写入的目录即可。

function cache_get_contents($url, $offset = 600, $override = false) 
    $file = '/tmp/file_cache_' . md5($url);
    if (!$override && file_exists($file) && filemtime($file) > time() - $offset)
        return file_get_contents($file);

    $contents = file_get_contents($url);
    if ($contents === false)
        return false;

    file_put_contents($file, $contents);
    return $contents;

【讨论】:

现在我正在使用返回 DOM 对象的 file_get_html。现在你的返回一个字符串 在字符串上使用 str_get_html()。 你确定你有/tmp的写权限吗? file_get_contents() 失败了吗?可以尝试在上述代码第6行之后调试$contents的值。【参考方案2】:

您可以使用 HTML 创建本地文件,然后跟踪 $SESSION 中的文件路径。如果您有磁盘空间并且可以运行数据库,则可以使用数据库来做同样的事情。数据库连接和对您正在查找的 URL 的查询根本不会增加太多开销。

【讨论】:

【参考方案3】:

一种方法是将数据保存到数据库或本地文件中。然后,您可以使用时间戳列或文件修改时间来确定是继续使用缓存还是提取并保存新副本。

如果您可以访问某种内存缓存(例如 memcached),那将是理想的。

【讨论】:

memcached 是一个好主意,除非您必须存储大量数据。听起来文件缓存在这种情况下更理想。 @dtbame,很公平。 OP没有指定数据量。所以我把它作为辅助提供。

以上是关于缓存 PHP 简单 HTML DOM 解析器的主要内容,如果未能解决你的问题,请参考以下文章

用于“生成的源代码”的 PHP 简单 HTML DOM 解析器

输入字段中的简单 HTML DOM 解析器

在使用简单的HTML Dom解析器进行解析之前,我如何登录Web表单网站?

如何使用 dom php 解析器

简单的 HTML DOM 解析器 - 删除元素不起作用

laravel 5 的简单 html dom 解析器