1*ab45ba71SJames Collins<?php 2*ab45ba71SJames Collins/** 3*ab45ba71SJames Collins * Mikio CSS Engine 4*ab45ba71SJames Collins * 5*ab45ba71SJames Collins * @link http://dokuwiki.org/template:mikio 6*ab45ba71SJames Collins * @author James Collins <james.collins@outlook.com.au> 7*ab45ba71SJames Collins * @license GPLv2 (http://www.gnu.org/licenses/gpl-2.0.html) 8*ab45ba71SJames Collins */ 9*ab45ba71SJames Collinstry { 10*ab45ba71SJames Collins $lesscLib = '../../../vendor/marcusschwarz/lesserphp/lessc.inc.php'; 11*ab45ba71SJames Collins if(file_exists($lesscLib)) { 12*ab45ba71SJames Collins require_once($lesscLib); 13*ab45ba71SJames Collins 14*ab45ba71SJames Collins if(isset($_GET['css'])) { 15*ab45ba71SJames Collins $baseDir = dirname(__FILE__) . '/'; 16*ab45ba71SJames Collins $cssFile = realpath($baseDir . $_GET['css']); 17*ab45ba71SJames Collins 18*ab45ba71SJames Collins if(strpos($cssFile, $baseDir) === 0 && file_exists($cssFile)) { 19*ab45ba71SJames Collins $lastModified = filemtime($cssFile); 20*ab45ba71SJames Collins $eTagFile = md5_file($cssFile); 21*ab45ba71SJames Collins $eTagHeader = (isset($_SERVER['HTTP_IF_NONE_MATCH']) ? trim($_SERVER['HTTP_IF_NONE_MATCH']) : FALSE); 22*ab45ba71SJames Collins 23*ab45ba71SJames Collins header('Content-Type: text/css; charset=utf-8'); 24*ab45ba71SJames Collins header('Last-Modified: ' . gmdate('D, d M Y H:i:s', $lastModified) . ' GMT'); 25*ab45ba71SJames Collins header('Etag: ' . $eTagFile); 26*ab45ba71SJames Collins header('Cache-Control: public, max-age=604800, immutable'); 27*ab45ba71SJames Collins 28*ab45ba71SJames Collins if(@strtotime($_SERVER['HTTP_IF_MODIFIED_SINCE']) == $lastModified || $eTagHeader == $eTagFile) { 29*ab45ba71SJames Collins header('HTTP/1.1 304 Not Modified'); 30*ab45ba71SJames Collins exit; 31*ab45ba71SJames Collins } 32*ab45ba71SJames Collins 33*ab45ba71SJames Collins $css = file_get_contents($cssFile); 34*ab45ba71SJames Collins 35*ab45ba71SJames Collins $less = new lessc(); 36*ab45ba71SJames Collins $less->setPreserveComments(false); 37*ab45ba71SJames Collins $css = $less->compile($css); 38*ab45ba71SJames Collins 39*ab45ba71SJames Collins $accept_encoding = @getallheaders()['Accept-Encoding']; 40*ab45ba71SJames Collins if($accept_encoding && preg_match('/ *gzip *,?/', $accept_encoding)) { 41*ab45ba71SJames Collins header('Content-Encoding: gzip'); 42*ab45ba71SJames Collins echo gzencode($css); 43*ab45ba71SJames Collins } else { 44*ab45ba71SJames Collins echo $css; 45*ab45ba71SJames Collins } 46*ab45ba71SJames Collins } else { 47*ab45ba71SJames Collins header('HTTP/1.1 404 Not Found'); 48*ab45ba71SJames Collins echo "The requested file could not be found"; 49*ab45ba71SJames Collins } 50*ab45ba71SJames Collins } else { 51*ab45ba71SJames Collins header('HTTP/1.1 404 Not Found'); 52*ab45ba71SJames Collins echo "The requested file could not be found"; 53*ab45ba71SJames Collins } 54*ab45ba71SJames Collins } else { 55*ab45ba71SJames Collins throw new Exception('Lessc library not found'); 56*ab45ba71SJames Collins } 57*ab45ba71SJames Collins} 58*ab45ba71SJames Collinscatch(Exception $e) { 59*ab45ba71SJames Collins header('HTTP/1.500 Internal Server Error'); 60*ab45ba71SJames Collins} 61