Page caching mod for sNews 1.7
Hi again, as promised, I have completed my caching mod for sNews 1.7, and here is my initial release.
What the hell is caching and do I need it?
Well, basically what we're doing with this mod is saving a page's output into a raw HTML document, and we serve that page until there's a change that would require hitting the database again. If your site is like mine and gets a few comments a day and you're adding a few articles a day, then yes, this mod would likely help you considerably.
Uh, what? I need an example please.
Fair enough, say you have an article with 20 comments, every time someone visits that page, you're querying the database for the article, all the comments, as well as anything else on the page (site title, description, categories list, pages, recent comments list, recent articles, my related posts mod, etc). With this mod the first time someone calls the page all information would be pulled from the database and the resulting HTML will be saved into your "cache" folder, and then subsequently served to users after that, up until a new comment is posted, an article is added/edit/deleted, etc.
Sound good? Great, this is another super easy mod to implement, first download the package and unzip.
VERSION history
[1.0.3] - added code to strip failed comments
[1.0.2] - fixed the check for approved comments, should properly empty the cache now
[1.0.1] - added "remember me" function for my sticky forms mod
[1.0.0] - initial release
Now modify the following variables inside the mod.cache.php file. They are self-explanatory, and the comments inside the file should assist you.
$cache_dir = '/home/mysite/cache'; $cache_keep_days = '7'; $cache_polls = '0';
Cool, now upload mod.cache.php to the same directory as your snews.php and index.php files. Create the "cache" directory you specified now as well, if you haven't already.
Now open your index.php file add add the following at the top, just below your snews.php include (and poll include if you have it), like the following;
<?php
include('snews.php');
include('mod.cache.php');
//include("mod_poll/poll_functions.php"); //uncomment if you're using my polls mod
startCache();
?>
Now add this to the very bottom of your index.php file;
<?php outputCache(); ?>
Yeah, that's it, upload index.php and browse your site when you're not logged in, you'll see your cache directory start filling up and notice your MySQL database getting only one query per page once cached. Edit an article or post a comment and watch the cache folder empty.
Comments
RSS Comments Feed
Poppoll
Added.
PP
Sven / Philippe
Another try:
Hi Matt
Nice job you've done with that Mod.
It works as the files are created but I'm not sure it's gonna work as of on 1and1 shared servers.
I'm receiving a message sayin it's not allowed there. :-D
Gonna see if it can be fixed by a php.ini.
slemborg
Matt
@ Slemborg, I hear you, my site doesn't really either, but it doesn't really hurt to cache content when no DB connection is really needed.
Matt
Sven / Philippe
They don't give any information.
.cache files are created but can't be read.
Matt
You can check and see if you're running PHP in safe mode, just create a file called phpinfo.php, put this in it;
Then upload it and check if safe_mode is Off or On.
BTW, safe_mode is being removed from PHP 6, thankfully.
Sven / Philippe
Sven / Philippe
Try to post a comment there: http://on-air.hiseo.fr/fatras/temps-de-chargement-et-referencement/.
New comments aren't displayed.
Matt
Yes, I'm running it on here no problem.
It looks like the cache isn't being emptied on new comments, do you have comment moderation enabled or do you allow new comments to post immediately?
Did you verify you're not in safe mode?
Sven / Philippe
Matt
Change
if (s('mail_on_comments') == 'off') { $moderateOff = true; }to
if (s('approve_comments') != 'on') { $moderateOff = true; }I will fix and update package now.
Sven / Philippe
Matt
toolman
Unfortunately, my site is running statistics (chCounter) and
[MOD] Page view counter for sNews 1.7 only http://snewscms.com/forum/index.php?topic=8089.0
Is there any easy way to update only those data?
For example, everything between
<span class="statV">
and
</span>
will be updated.
I should be grateful for your response.
P.S.
Translation to English: translate.google.pl
Matt
Yes, it's easy enough to do, provided you have the functions that output the data. If you look at the code inside mod.cache.php, you can see where we strip the dynamic content with a preg_replace, and then update it with the correct content, whether it's the user's IP or the show_poll function.
To do this, you need to uniquely identify the content you're replacing. Say, for example, the page counter, wrap the number in HTML comments, like
<!-- START_COUNTER -->
php function that outputs the counter code
<!-- END_COUNTER -->
then strip it inside mod.cache.php for storage;
$cache = preg_replace('/<!--\sSTART_COUNTER\s-->(.*?)<!--\sEND_COUNTER\s-->/s', '<!--COUNTER-->', $cache); and finally add the counter back in when the cached page is served; $cache = preg_replace('/(<!--COUNTER-->)/e', 'counterFunction($variables)', $cache);Because you're not querying the article database, you'll need to write a separate function to get the counter, as shown with the "counterFunction" I added above.
Does that make sense?
pATRIC
Tatsu
damnit once again me :/ sorry Matt, but I dont see nothing :/
<?php include('snews.php'); include('mod.cache.php'); include("mod_poll/poll_functions.php"); //uncomment if you're using my polls mod startCache(); ?> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">and added the output
Nothing is displaying...but I see the cashe folder has something inside it :( Whats wrong here :S
Matt
Tatsu
Damnit... :D
Matt
Does it only give you a blank page on the first view? What browser are you using?
Tatsu
enj0y matt
Matt
toolman
I use a modified "Page view counter for sNews 1.7" (http://snewscms.com/forum/index.php?topic=8089.0)
Unfortunately, I have a problem with the refresh counter.
I added a function StartCache() line:
$cache = str_replace('<!--COUNTER-->', $views, $cache);
and to OutputCache() line:
$cache = preg_replace('/<!--\sCOUNTER_START\s-->(.*?)<!--\sCOUNTER_END\s-->/s', '<!--COUNTER-->', $cache);
Cache file now contains a <!--COUNTER--> , but unfortunately does not display the counter in your browser.
What am I doing wrong?
Matt
Looks like there's no spaces in the counter comment, i.e.
<!-- COUNTER -->58 comments, page 1 of 3 [ 1 2 3 » ]