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

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

【问题讨论】:

    标签: php html parsing caching dom


    【解决方案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没有指定数据量。所以我把它作为辅助提供。
      猜你喜欢
      • 2014-01-15
      • 2012-01-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-07-30
      • 2018-03-05
      • 2015-02-14
      相关资源
      最近更新 更多