I have a unique problem, which is proving difficult to solve using google. I am consolidating all of my javascript and css into separate php files, which use require_once() to pull the contents of the files in. The javascript file looks something like this:
<?php
header('Content-Type: text/javascript');
require_once('jquery.form.js');
require_once('jquery.jqtransform.js');
require_once('jquery.validate.js');
?>
My specific problem is that web browsers will 'see' that this is a dynamic page, because of the php file extension, and then request the content anew each time a page on the site is loaded. What I am trying to do is get the time of last request from the browser, and then check each file modification time to see if I really do need to send the file contents again. It is proving difficult to find the time of last request by the user. Also, I have not yet started to tackle the problem of finding the last modified date of the files that are included, so if there is information regarding finding the file details of a file on the server, that would also be appreciated.
Just to be clear, the reason I am doing this is because (I think) it takes advantage of the gzip compression better than individually gzipped files.
Thanks in advance
I wrote a series of posts about this issue specifically. See Supercharging Javascript in PHP and Supercharging CSS in PHP. These cover:
Alister Bulman just mentioned a neat library solution for this problem but placed it as a comment. I'm repeating his comment as an answer since I found it valuable:
Your premise is incorrect. Browsers don't "see" the PHP file extension and decide not to cache things. See http://www.enhanceie.com/redir/?id=httpperf for information on how browsers really work.
You should set an ETAG on your response, and then you can simply check the If-None-Match request header and return a 304 if the content is unchanged.
Browsers don't determine if a page or a file is dynamic or static by its extension. Its headers do. Just set the proper headers so the browser knows it can cache the results.
Also, ditch the closing
?>
. It's not required and is bad practice.You can enable auto-gzipping of files using apache mod_deflate.
You can also use apache mod_rewrite to refer to these files in the html as js files and redirect the request to the php files, avoiding your server caching issues.
Something like this:
Put this code in a .htaccess file in your directory.