I’ve been (attempting to) set up caching on WordPress for a client, and after days (literally) of poking around, trying to figure out what was going on with both WP-Cache, and then WP-Super-Cache, I finally have an answer.
The Configuration
Everything here is happening on a completely (and very) custom theme, which is hosted on a WP 2.6.1 blog. It’s powered by 2 frontend web servers, which are transparently accessed via an LVS. The database is hosted on 2 servers, which are configured in a multiple-master configuration and are also accessed via the LVS. I’ve configued WP-Cache and WP-Super-Cache before so I’m confident I haven’t messed anything “basic” up with the configuration of the plugin.
The Problem
Let’s make sure we’re solving the same problem here. I was seeing my pages load just fine, and they even included the appended comment:
<!-- Dynamic Page Served (once) in 0.928 seconds -->
I saw that files were created in wp-content/cache/*.html but there were no files created in wp-content/cache/meta/*.meta (for WP-Super-Cache). Apparently without the meta files (which contain appropriate headers etc), the caching system assumes it can’t send the cached version, so it re-processes everything and sends the dynamic version (thus the comment).
The Solution(s)
I tried all sorts of things to get this to work, including:
- Moving the define(‘WP_CACHE’, true) to the top of wp-config.php, just in case
- Deleting and manually re-creating the symlink for advanced-cache.php
- Turning on $use_flock in wp-cache-config.php
- Modifying $sem_id in wp-cache-config.php (you never know!)
- Banging my head repeatedly on the keyboard.
Needless to say, none of these things worked. Eventually, I came across a thread where Donncha (the author of WP-Super-Cache, and really nice guy to boot) mentions that a plugin doesn’t have an ob_end_flush() where it should. That reminded me of a post about Anarchy Media Player not working with WP-Cache that I’d seen, so I tried it out by changing the end of my footer.php theme file to look like this:
</html><?php while (ob_end_flush()) {} ?>
That seems to have fixed it! I’m now getting the beloved comment that I was looking for in my source files:
<!-- Cached page served by WP-Cache -->
and performance is way up. High-fives all around. The moral of the story is make sure you close/flush buffers in your themes and plugins. This is a bit of a hack fix for when someone doesn’t do that, but it works.
You. saved. my. life.
Hey Alberto, that's great news! This was so frustrating (and had
severe consequences on the server I was working on), so I'm glad I
could help someone else out.
Excellent!Thanks a lot for the info!
No problem, glad I could help 😉
Thanks a million!
Turning on $use_flock in wp-cache-config.php did it for me.
Once again, thanks a lot 🙂
Thanks so much! This resolved the issue with my theme.
Lebens,
I have the same problem with you. At the end of my source pages, I only see something like:
</body>
</html>
<!– Dynamic page generated in 4.939 seconds. –>
(WITHOUT the second line "<!– Cached page served by WP-Cache –>)
I see my WPSuperCache admin, and there is records like: WP-Cache (2.10MB)
* 30 Cached Pages
* 6 Expired Pages
WP-Super-Cache (55.10MB)
* 224 Cached Pages
* 942 Expired Pages
I think the plugin working, but I wonder why the loading time bocome slower than before I use this plugin (okay, about the loading time, may be my server down, and often I get 500 internal server error when opening my homepage).
So why there was no second line "<!– Cached page served by WP-Cache –>"?
I am trying to add "</html><?php while (ob_end_flush()) {} ?>" at the end (means "really at the end line) of footer.php, but also not working. Or maybe I have to put the code "not at the very end" line?
Suggestion from you would be much helpful.
Sory Lebens for my English.
Thank you – Jarar from Indonesia.
(I put link to my single post, if only you can not open my homepage because my server problem these days. I will appreciate if you would send me email about my plugin problem).