缓存 PHP 简单 HTML DOM 解析器

发布于 2024-11-07 13:42:35 字数 144 浏览 0 评论 0原文

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

I am using the PHP HTML DOM Parser to pull data from an external website. To reduce load and speed up page rendering time I want to cache data I pull for a certain period. How can I do this?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

你是暖光i 2024-11-14 13:42:35

我编写了这个文件缓存函数,它基本上只是替换 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;
}

I wrote this file cache function which basically just replaces file_get_contents. You can specify the amount of time the cache should last for in $offset or completely override the cache with $override. If you don't want to use /tmp/, just change that directory to something you can read/write to.

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;
}
勿挽旧人 2024-11-14 13:42:35

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

You could create local files with the HTML and then keep track of the file paths in the $SESSION. If you have the disk space and can run a database, you could use a database to do the same thing. A database connection and query on the URL you're looking for won't add much overhead at all.

第七度阳光i 2024-11-14 13:42:35

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

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

One way would be to save the data to a database or local file. You could then use a timestamp column or file modification time to determine whether to continue using the cache or pull and save a fresh copy.

If you have access to some kind of memory caching (e.g. memcached) that would be ideal.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文