Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Caching PHP Simple HTML DOM Parser

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?

like image 678
Matthew Hui Avatar asked Jan 19 '23 17:01

Matthew Hui


2 Answers

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;
}
like image 96
dtbarne Avatar answered Jan 22 '23 06:01

dtbarne


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.

like image 38
Andrew Avatar answered Jan 22 '23 06:01

Andrew