My Google-fu hasn’t revealed what I’m looking for, so I’m putting this one out to the crowd.
Coming from an ASP.NET development background, I’m used to having the
Cache collections available for me to stash rarely-modified but often-used resources (such as lookup rows from a database or the contents of static XML documents) in the memory of the web server, so I don’t have to reload these often-used items during every request.
Does PHP have an equivalent? I’ve read up briefly on the memcache extension, but this won’t work for me (as I don’t have control over the server configuration.) I’m tempted to implement something that would allow me to pre-parse or pre-select the resources and generate a sort of PHP cache “file” that would construct the cached object from literals stored in the file, but this seems like a very hacky solution to me.
Is there something in PHP (or, alternatively, a helper library of some sort) that will allow me to accomplish this using best practices?
In short, no, such a thing is not available natively in PHP. To understand why, you have to understand that PHP has its entire environment built for each request, and it is subsequently torn down at the end of the request. PHP does give you $_SESSION to store per session variables, but after digging into the docs you will see that that variable is built during each request also. PHP (or mod php to be more specific) is fundamentally different from other “application servers”. Basically, it is not an application server. It is a per request script runner.
Now, don’t get me wrong, PHP lets you do application level data store, but you will have to go to a database, or to disk to get it. Remember this though, don’t worry about optimizing for performance until it is shown that preformance is a problem. And I will guess that 99 times out of 100, by the time performance is an issue that isn’t due to some poor code you wrote, you will have the resources to build your own pretty little memcached server.
Take a look at Zend_Cache library, for example. It can cache in multiple backends.