Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Cache using PHP cURL

Tags:

php

curl

caching

I'm using PHP cURL to fetch information from another website and insert it into my page. I was wondering if it was possible to have the fetched information cached on my server? For example, when a visitor requests a page, the information is fetched and cached on my server for 24 hours. The page is then entirely served locally for 24 hours. When the 24 hours expire, the information is again fetched and cached when another visitor requests it, in the same way.

The code I am currently using to fetch the information is as follows:

$url = $fullURL;
$ch = curl_init();    
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); 
curl_setopt($ch, CURLOPT_URL, $url); 
$result = curl_exec($ch); 
curl_close($ch); 
echo $result;

Is this possible? Thanks.

like image 748
Matt Avatar asked Feb 12 '11 13:02

Matt


1 Answers

You need to write or download a php caching library (like extensible php caching library or such) and adjust your current code to first take a look at cache.

Let's say your cache library has 2 functions called:

save_cache($result, $cache_key, $timestamp)

and

get_cache($cache_key, $timestamp)

With save_cache() you will save the $result into the cache and with get_cache() you will retrieve the data.

$cache_key would be md5($fullURL), a unique identifier for the caching library to know what you want to retrieve.

$timestamp is the amount of minutes/hours you want the cache to be valid, depending on what your caching library accepts.

Now on your code you can have a logic like:

$cache_key = md5($fullURL);
$timestamp = 24 // assuming your caching library accept hours as timestamp

$result = get_cache($cache_key, $timestamp); 
if(!result){
   echo "This url is NOT cached, let's get it and cache it";
  // do the curl and get $result
  // save the cache:
  save_cache($result, $cache_key, $timestamp);
}
else {
  echo "This url is cached";
}
echo $result;
like image 95
Tony Avatar answered Oct 27 '22 00:10

Tony