Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Leverage browser caching with php?

Tags:

php

.htaccess

I was checking google page speed tool @ http://pagespeed.googlelabs.com and my site point was 88. It suggest me to use Leverage browser caching for the site. I searched stackoverflow about it but all it was about htaccess, my hosting doesn't let me to use htaccess, how can I make it in PHP without htaccess?

htaccess codes were

<FilesMatch "\.(ico|pdf|flv|jpg|jpeg|png|gif|js|css|swf)$">
Header set Cache-Control "max-age=290304000, public"
</FilesMatch>
like image 915
qweqwe qwe Avatar asked Dec 28 '22 18:12

qweqwe qwe


2 Answers

If your hoster does not support .htaccess nor configuring the webserver with other methods, you would need to implement the whole HTTP stack into your own application to offer configuration of your own.

That means sending the appropriate headers for the files in question next to the files itself. You would need to map those files onto commands your application (which is normally done with .htaccess + Mod_Rewrite as well).

Shortly said, you would need to deliver everything by PHP scripts that set the headers in question. However this has the downside that PHP needs to process everything which will have a drawback on speed compared to static file delivery by the webserver. So I can not really suggest you to do it that way. It's much easier to just get a proper webhoster (or to upgrade your package) to get the features you're looking for before re-inventing the wheel. So getting some .htaccess support is probably the most easy way.

As an alternative but somewhat similiar, you can consider to put the static files onto another host that provides the features you need (e.g. a CDN) and leave the core application on the current webhost, but I assume this only makes things more complicated than it does help you easily.

like image 69
hakre Avatar answered Jan 10 '23 14:01

hakre


After doing a day of research i get this solution for Leverage browser cashing with .htaccess file.

Remember mod_expires and mod_headers should be open in server

Just put the on the .htaccess file.

<IfModule mod_expires.c>
  ExpiresActive On
  ExpiresDefault "access plus 1 seconds"
  ExpiresByType image/x-icon "access plus 2592000 seconds"
  ExpiresByType image/jpeg "access plus 2592000 seconds"
  ExpiresByType image/png "access plus 2592000 seconds"
  ExpiresByType image/gif "access plus 2592000 seconds"
  ExpiresByType application/x-shockwave-flash "access plus 2592000 seconds"
  ExpiresByType text/css "access plus 604800 seconds"
  ExpiresByType text/javascript "access plus 216000 seconds"
  ExpiresByType application/x-javascript "access plus 216000 seconds"
  ExpiresByType text/html "access plus 600 seconds"
  ExpiresByType application/xhtml+xml "access plus 600 seconds"
</IfModule>
<IfModule mod_headers.c>
<FilesMatch "\\.(ico|jpe?g|png|gif|swf)$">
Header set Cache-Control "max-age=2692000, public"
</FilesMatch>
<FilesMatch "\\.(css)$">
Header set Cache-Control "max-age=2692000, public"
</FilesMatch>
<FilesMatch "\\.(js)$">
Header set Cache-Control "max-age=216000, private"
</FilesMatch>
<FilesMatch "\\.(x?html?|php)$">
Header set Cache-Control "max-age=600, private, must-revalidate"
</FilesMatch>
Header unset ETag
Header unset Last-Modified
</IfModule>
like image 41
Pus Avatar answered Jan 10 '23 13:01

Pus