Jump to content

PHP partial content caching script


bpbp

Recommended Posts

Hi I found this script on the net and I think its great it caches my dynamic mysql content in to static pages to reduce load on the server. There is one problem I can't figure out.. When i run the script it shows the dynamic mysql content  plus content from the cache right below it. I have settings in place where if file cache is not old then it should load, but for some reason the dynamic content loads anyway. 

 

Any thoughs on how i can prevent the script to show the dynamic mysql content, when the cache file is still valid?

<html>
<body>
<hr>
Header
<hr>
<?
// PHP Fast File Cache v0.1b
// Written by Åke Wallebom (ake at ake nu)
// Free to use for non-commercial purposes

$cache_cacheDirectory = '/home/class/public_html/cache/';
if (!isset($cache_refreshTime)) {
	$cache_refreshTime = 5; // seconds to keep a cached copy
}

/////
// No configuration beyond this line
/////

function cache_fopen_exclusive($id) {
	if ($fp = fopen($id, "ab+")) {
		if (flock($fp, LOCK_EX | LOCK_NB)) {
			return $fp;
		} else {
			fclose($fp);
		}
	}

	return false;
}

function cache_fclose_exclusive($fp) {
	flock($fp, LOCK_UN);
	fclose($fp);
}

// Create cache file name
if (isset($cache_parameters) && is_array($cache_parameters)) {
	$cache_id_param = '';
	foreach($cache_parameters as $value) {
		if (isset($_REQUEST[$value])) {
			$cache_id_param = $cache_id_param . '_' . $value . '=' . $_REQUEST[$value];
		}
	}

	$cache_id = md5($_SERVER['REQUEST_URI']) . '_' . md5($cache_id_param);
} else {
	$cache_id = md5($_SERVER['REQUEST_URI']);
}
$cache_cacheFile = $cache_cacheDirectory . $cache_id . '.cache.html';

$cache_FileExists = file_exists($cache_cacheFile);
$cache_FileIsFresh = $cache_FileExists && (time() - filemtime($cache_cacheFile) < $cache_refreshTime);

// Check if cache file is usable or not
if ($cache_FileIsFresh) {
	$cache_UseCache = true;
} else {
	$cache_UseCache = false;
	if ($cache_fp_lock = cache_fopen_exclusive($cache_cacheFile . '.lock')) {
		// We got the lock, create new cache
		$cache_UpdateCache = true;
	} else {
		// We didn't get the lock, use old file or regenerate
		$cache_UseCache = $cache_FileExists;
		$cache_UpdateCache = false;
	}
}	


// We will update the cache file and should not abort if the user cancels the request
if ($cache_UpdateCache) {
	ignore_user_abort(true);
}

// Output cached content
if ($cache_UseCache) {
	// Display the cached file
	readfile($cache_cacheFile);
	//exit;
}
else {
// We need to regenerate the page...
ob_start();
}
?>

Hello World<br>
Here is the content that is needed to be cached.

<?
// PHP Fast File Cache v0.1b
// Written by Åke Wallebom (ake at ake nu)
// Free to use for non-commercial purposes

// Get all output data and save to cache file
if ($cache_UpdateCache) {
	if ($cache_fp = fopen($cache_cacheFile . '.new', "wb")) {
		$cache_data = ob_get_contents();
		fwrite($cache_fp, $cache_data, strlen($cache_data));
		fclose($cache_fp);
		rename($cache_cacheFile . '.new', $cache_cacheFile);
	}

	// Close and remove the lock-file
	cache_fclose_exclusive($cache_fp_lock);
	$cache_er_old = error_reporting(0);
	unlink($cache_cacheFile . '.lock');
	error_reporting($cache_er_old);

	// The script can now be aborted by the user without any problems		
	ignore_user_abort(false);
} 

if (!$cache_UseCache)
ob_end_flush();

?>
<hr>
Footer
<hr>







Link to comment
Share on other sites

This thread is more than a year old. Please don't revive it unless you have something important to add.

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

×
×
  • Create New...

Important Information

We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.