Simple File Caching Script

On a recent project, I needed a quick, easy and simple caching function for XML files, so whipped up this little function.

How it works

It takes:

  • The URL of the file / XML you need to cache
  • The cache file, if one is not specified, it creates and uses “temp.txt”
  • The amount of time to cache the file, if one is not specified, it uses 12 minutes (you can change this to whatever you would like

The Function

function cacheFeed( $feed, $cacheFile='temp.txt', $cacheTime=12 ) {
	$debug = false; // Set this to true for output and debuging
	if ( $debug ) echo "Begining feed";
	if ( $debug ) echo "File Exists: ";

	// Make sure the file is there
	if ( file_exists($cacheFile) ) { // Make sure the file is there
		if ( $debug ) echo "True";

		// If the file modified time is outside of the cache time OR the file size is 0 (empty file)
		if ( strtotime('+'.$cacheTime.' minutes',filemtime($cacheFile)) < strtotime("now") || !filesize($cacheFile) ) {
			// Set up curl and options
			$ch = curl_init();
			curl_setopt( $ch, CURLOPT_URL, $feed );
			curl_setopt( $ch, CURLOPT_RETURNTRANSFER, true );
			curl_setopt( $ch, CURLOPT_FOLLOWLOCATION, true );
			curl_setopt( $ch, CURLOPT_HEADER, 0);
			$data = curl_exec( $ch );
			curl_close( $ch );

			if ( $data != "" ) {
				if ( $debug ) echo "Recieved Feed";
				file_put_contents($cacheFile,$data);
				if ( $debug ) echo "Writing to Cache File";
			}
		} else {
			$data = file_get_contents($cacheFile);
		}
	} else {
		if ( $debug ) echo "False";

		$f = fopen($cacheFile,'x'); // Create file to write to.
		if ( $f ) {
			fclose($f); // No need to keep it open
			$data = $this->cacheFeed($feed,$cacheFile,$cacheTime);
		} else {
			$data = false;
		}
		$data = cacheFeed($feed,$cacheFile,$cacheTime);
	}
	return $data;
}

Example Usage

	include_once( 'cacheFeed.php' );
	$cacheFile = 'cache/cacheFile.xml';
	$feed = 'http://linktoyour.com/XMLfile.xml';
	$data = cacheFeed($feed, $cacheFile, 30);
	$xml = new SimpleXMLElement($data);

Thats it, pretty simple to use. I hope someone gets some use out of this!

Your Thoughts...



All content © Copyright 2012 by Tasty Bytes.
Subscribe to RSS Feed – Posts or just Comments