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