PHP-APC: Speed up your web applications!

As regular readers of this blog might know I have written quite some tools using the different API’s of search engines, and always found them quite useful. When I was implementing my sitewide search function, one of the things that bothered me that it was a bit slow. I knew that I had seen some caching implementations on the Yahoo PHP developer center, but I hadn’t bothered up till then to look at them a bit better.

Now I did, and I found the cacheAPC example to be very, very easy. It relies on the Alternative PHP Cache, an opcode cache PECL extension for PHP. I wrote two functions, which I then put in to all my pieces of code which I’ve published that use a lot of calls to the different API’s. The first is curlopen, the function I use to open connections:

function curlopen($request) {
	$ch = curl_init();
	curl_setopt($ch, CURLOPT_URL, $request);
	curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
	curl_setopt($ch, CURLOPT_TIMEOUT, 100);
	curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
	$results = curl_exec ($ch);
	return $results;

The second one is the actual cache function, look at how easy it is:

function request_cache($url, $ttl) {
	if(!$doc = apc_fetch($url)) {
		$doc = curlopen($url);
		if ($doc === false) return false;
		apc_store($url,$doc, $ttl);
	return $doc;

It basically does three things:

  1. It looks if the requested resource is already in the cache, and if it is, it fetches that;
  2. If it’s not, it opens it through curlopen and stores it in the cache;
  3. It returns the requested data;

As you can see the request_cache function takes two parameters: the request url and the TTL, which, in seconds, determines how long that resource should be cached. Now if you request a PageRank for a URL, it’s fairly safe to set this to 24 hours, and you can see how much requests this saves!


Check out our WordPress SEO Premium plugin

15 Responses

  1. Hong Kong SEOBy Hong Kong SEO on 8 April, 2007

    But is this application SEO friendly?

  2. Joost de ValkBy Joost de Valk on 8 April, 2007

    It doesn’t change any output, so yes, it is. It works server side before anything is written to the client.

  3. steve MBy steve M on 12 September, 2007

    Good article in a simple usefull understandable style,What if we increase the TTL,will it be more cache boost.I would like know does it support SEO?

  4. steve MBy steve M on 12 September, 2007

    Thanks, Despite the title of my original post, I think I agree with your post. Of course.What if we increase TTL timing, will it boost cache.i would like to know does this application support SEO.

  5. rakeshBy rakesh on 5 October, 2007

    what is the purpose of curlopen

  6. Joost de ValkBy Joost de Valk on 5 October, 2007

    It’s a function I wrote that get’s the content from a URL. Basically the CURL version of file_get_contents.

  7. rakeshBy rakesh on 5 October, 2007

    is this curl works on ftp only

  8. Joost de ValkBy Joost de Valk on 5 October, 2007

    No CURL works on everything.

  9. rakeshBy rakesh on 5 October, 2007

    why can we get the url from curl, actually we just want to
    check the data available in that cache only

  10. Joost de ValkBy Joost de Valk on 5 October, 2007

    Well this function uses curlopen to request the data from the URL when it’s not currently in the cache.

  11. rakeshBy rakesh on 5 October, 2007

    if i use In my application can i change anything in that 2 parts
    means in curl and memcache

  12. rakeshBy rakesh on 5 October, 2007

    sorry not memcache in APc cache

  13. rakeshBy rakesh on 5 October, 2007

    can you please send one complete application using
    apc cache please it’s very urgent.
    thank you.

  14. Joost de ValkBy Joost de Valk on 5 October, 2007

    No. You can hire me for Eur 75 per hour.

  15. OndraBy Ondra on 13 July, 2008

    Thanks for quick introduction to APC, it was exactly what I was looking for. PS: serene discussion above :)