sweethoney Posted August 12, 2017 Posted August 12, 2017 need a solution for this made some custom php and gzip.php now nee to know how to get this to work the issue is when all this is add it breaks the ips them i have not tryed it with any other them but i think this would benefit for us all when it comes to performance Step 1: PHP Configuration Add or modify the following lines in your custom php.ini file: output_handler = Off zlib.output_compression = On zlib.output_handler = ob_gzhandler Now this will take care of gzipping all PHP files. Step 2: .htaccess Configuration Add the following lines to the bottom of a .htaccess file in the root of your website. <IfModule mod_rewrite.c> RewriteEngine On RewriteRule ^(.*\.js) gzip.php?type=js&file=$1 RewriteRule ^(.*\.css) gzip.php?type=css&file=$1 </IfModule> This will redirect all requests for .css and .js files through gzip.php, which we will create in the next step. Step 3: File Processing PHP Script The following PHP script will inherently use the PHP compression you’ve already enabled and also add headers to your files take advantage of your client’s browser cache to make subsequent loads faster. Create a file named gzip.php in your website’s root and add the following lines to it: <?php //check that zlib compression is enabled if(!ini_get('zlib.output_compression')){ die(); } $allowed = array('css','js'); //set array of allowed file types to prevent abuse //check for request variable existence and that file type is allowed if(isset($_GET['file']) && isset($_GET['type']) && in_array(substr($_GET['file'],strrpos($_GET['file'],'.')+1), $allowed)){ $data = file_get_contents(dirname(__FILE__).'/'.$_GET['file']); // grab the file contents $etag = '"'.md5($data).'"'; // generate a file Etag header('Etag: '.$etag); // output the Etag in the header // output the content-type header for each file type switch ($_GET['type']) { case 'css': header ("Content-Type: text/css; charset: UTF-8"); break; case 'js': header ("Content-Type: text/javascript; charset: UTF-8"); break; } header('Cache-Control: max-age=300, must-revalidate'); //output the cache-control header $offset = 60 * 60; $expires = 'Expires: ' . gmdate('D, d M Y H:i:s',time() + $offset) . ' GMT'; // set the expires header to be 1 hour in the future header($expires); // output the expires header // check the Etag the browser already has for the file and only serve the file if it is different if ($etag == $_SERVER['HTTP_IF_NONE_MATCH']) { header('HTTP/1.1 304 Not Modified'); header('Content-Length: 0'); } else { echo $data; } } ?> Great! With these steps in place your css and javascript files will be processed by gzip.php and output using PHP’s gzip compression library (zlib). This method can be extended to more filetypes by adding to the allowed file types in gzip.php and adding more lines to your .htaccess file. is there a way to get this to work if so how and what to add from the them from breaking here is the issue with this when it is placed in side your .htaccess file <IfModule mod_rewrite.c> RewriteEngine On RewriteRule ^(.*\.js) gzip.php?type=js&file=$1 RewriteRule ^(.*\.css) gzip.php?type=css&file=$1 </IfModule>
Stuart Silvester Posted August 12, 2017 Posted August 12, 2017 There's actually a far more simpler way to do this. Add the following to your .htaccess file, if your server supports mod_deflate it'll automatically compress CSS/JS/XML Files. <ifmodule mod_deflate.c> AddOutputFilterByType DEFLATE text/xml text/css application/x-javascript application/javascript </ifmodule>
sweethoney Posted August 12, 2017 Author Posted August 12, 2017 i did that but it still breaks the theme
Recommended Posts
Archived
This topic is now archived and is closed to further replies.