A super easy PHP Framework for web development!
https://github.com/exacti/phacil-framework
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
196 lines
6.0 KiB
196 lines
6.0 KiB
<?php
|
|
/**
|
|
* CSS and JS Compression
|
|
* Copyright (c) 2014 ExacTI IT Solutions.
|
|
* Creative Commons Attribution, Share-Alike.
|
|
*
|
|
*
|
|
* To use this in your HTML, link to it in the usual way:
|
|
* <link rel="stylesheet" type="text/css" media="screen, print, projection" href="/css/compressed.css.php" />
|
|
*/
|
|
|
|
/* Add your CSS files to this array (THESE ARE ONLY EXAMPLES) */
|
|
|
|
ini_set("display_erros", 0);
|
|
|
|
$utilize_cache = (defined('CACHE_JS_CSS'))? CACHE_JS_CSS : false;
|
|
$cache_path = "css-cache"; // where to store the generated re-sized images. Specify from your document root!
|
|
$use_js_plus = (defined('CACHE_use_js_plus'))? CACHE_use_js_plus : false;
|
|
$cache_days = (defined('CACHE_DAYS'))? CACHE_DAYS : 14;
|
|
$reset_cache = (defined('RESET_CACHE'))? RESET_CACHE : false;
|
|
$minify = (defined('CACHE_MINIFY')) ? CACHE_MINIFY : false;
|
|
$include = false;
|
|
|
|
session_start();
|
|
if(isset($_SESSION['reset'])) {
|
|
$reset_cache = ($_SESSION['reset'] == 'true') ? true : false;
|
|
}
|
|
|
|
if($include == true) {
|
|
$document_root = (defined('DIR_CACHE'))? substr(DIR_CACHE, 0, -1) : $_SERVER['DOCUMENT_ROOT'];
|
|
$requested_uri = parse_url(urldecode($URI), PHP_URL_PATH);
|
|
$requested_file = basename($requested_uri);
|
|
$source_file = $URI;
|
|
|
|
} else {
|
|
$document_root = (defined('DIR_CACHE'))? substr(DIR_CACHE, 0, -1) : $_SERVER['DOCUMENT_ROOT'];
|
|
$requested_uri = parse_url(urldecode($_SERVER['REQUEST_URI']), PHP_URL_PATH);
|
|
$requested_file = basename($requested_uri);
|
|
$source_file = (defined('DIR_PUBLIC'))? substr(DIR_PUBLIC, 0, -1).$requested_uri : $document_root.$requested_uri;
|
|
}
|
|
|
|
$ignoreFiles = array(
|
|
"TreeMenu_v25.js"
|
|
);
|
|
|
|
/**
|
|
* Ideally, you wouldn't need to change any code beyond this point.
|
|
*/
|
|
|
|
|
|
|
|
$extension = strtolower(pathinfo($source_file, PATHINFO_EXTENSION));
|
|
|
|
$cache_file = $document_root."/$cache_path/$extension".$requested_uri;
|
|
|
|
|
|
|
|
if (file_exists($cache_file) and $utilize_cache === true) {
|
|
$buffer2 = file_get_contents($cache_file);
|
|
$fil = "1";
|
|
$date_cache_file = filemtime($cache_file);
|
|
|
|
|
|
} else {
|
|
$buffer2=false;
|
|
$buffer = file_get_contents($source_file);
|
|
}
|
|
|
|
|
|
if($buffer2 != false and $date_cache_file > strtotime("-$cache_days days") and $utilize_cache == true and $reset_cache == false) {
|
|
$buffer = $buffer2;
|
|
}
|
|
else {
|
|
|
|
if(!isset($buffer)) {
|
|
$buffer = file_get_contents($source_file);
|
|
}
|
|
|
|
if($utilize_cache == true) {
|
|
if (!is_dir("$document_root/$cache_path")) { // no
|
|
if (!mkdir("$document_root/$cache_path", 0755, true)) { // so make it
|
|
if (!is_dir("$document_root/$cache_path")) { // check again to protect against race conditions
|
|
// uh-oh, failed to make that directory
|
|
echo("Failed to create cache directory at: $document_root/$cache_path");
|
|
}
|
|
}
|
|
}
|
|
|
|
if (!is_dir("$document_root/$cache_path/$extension")) { // no
|
|
if (!mkdir("$document_root/$cache_path/$extension", 0755, true)) { // so make it
|
|
if (!is_dir("$document_root/$cache_path/$extension")) { // check again to protect against race conditions
|
|
// uh-oh, failed to make that directory
|
|
echo("Failed to create cache directory at: $document_root/$cache_path");
|
|
}
|
|
}
|
|
}
|
|
}
|
|
/*foreach ($cssFiles as $cssFile) {
|
|
$buffer .= file_get_contents($cssFile);
|
|
}*/
|
|
|
|
if (in_array($extension, array('css')) && $minify == true) {
|
|
// Remove comments
|
|
$buffer = preg_replace('!/\*[^*]*\*+([^/][^*]*\*+)*/!', '', $buffer);
|
|
|
|
// Remove space after colons
|
|
$buffer = str_replace(': ', ':', $buffer);
|
|
|
|
//$buffer = preg_replace('/(?:(?:\/\*(?:[^*]|(?:\*+[^*\/]))*\*+\/)|(?:(?<!\:|\\\|\')\/\/.*))/', '', $buffer);
|
|
|
|
$buffer = preg_replace('/<!--(.*)-->/Uis', '', $buffer);
|
|
|
|
|
|
// Remove whitespace
|
|
$buffer = str_replace(array("\r\n", "\r", "\n", "\t", ' ', ' ', ' '), '', $buffer);
|
|
|
|
} elseif($minify == true) {
|
|
|
|
$buffer = preg_replace('/<!--(.*)-->/Uis', '', $buffer);
|
|
if($use_js_plus == true) {
|
|
include_once __DIR__.'/JSMinPlus.php';
|
|
$buffer = JSMinPlus::minify($buffer);
|
|
} else {
|
|
include_once __DIR__.'/JSMin.php';
|
|
$buffer = JSMin::minify($buffer);
|
|
}
|
|
|
|
}
|
|
|
|
if (in_array($requested_file, $ignoreFiles)) {
|
|
$buffer = file_get_contents($source_file);
|
|
}
|
|
|
|
//echo $cache_file;
|
|
|
|
if($utilize_cache == true) {
|
|
$parts = explode('/', $cache_file);
|
|
$file = array_pop($parts);
|
|
$dir = '';
|
|
foreach($parts as $part) {
|
|
if(!is_dir($dir .= "/$part")) mkdir($dir, 0755, true);
|
|
}
|
|
file_put_contents($cache_file, $buffer);
|
|
}
|
|
|
|
}
|
|
|
|
if($include == true) {
|
|
|
|
$caminho = str_replace(array($basefolder, $requested_file), '', $source_file);
|
|
|
|
$caminho = explode("/", $caminho);
|
|
|
|
$r = count($caminho) - 3;
|
|
|
|
for($i = 0; $i <= $r; $i++) {
|
|
//echo $i;
|
|
$caminho2 .= $caminho[$i]."/";
|
|
}
|
|
|
|
//echo $caminho2;
|
|
|
|
//$caminho = str_replace(array($basefolder, $requested_file, end($caminho)), '', $source_file);
|
|
|
|
if (in_array($extension, array('css'))) {
|
|
$buffer = '<style>'.str_replace(array("../../../","../../", "../"), "/".$prev_u.$caminho2, $buffer).'</style>';
|
|
} else {
|
|
$buffer = '<script>'.$buffer.'</script>';
|
|
}
|
|
|
|
} else {
|
|
// Enable caching
|
|
header('Cache-Control: public');
|
|
|
|
// Enable GZip encoding.
|
|
ob_start("ob_gzhandler");
|
|
|
|
// Expire in one day
|
|
header('Expires: ' . gmdate('D, d M Y H:i:s', time() + 86400) . ' GMT');
|
|
//header('Accept-Encoding: deflate');
|
|
//header('Content-Encoding: deflate');
|
|
|
|
// Set the correct MIME type, because Apache won't set it for us
|
|
|
|
if (in_array($extension, array('css'))) {
|
|
header("Content-Type: text/".$extension);
|
|
} else {
|
|
header("Content-Type: text/javascript");
|
|
}
|
|
|
|
}
|
|
// Write everything out
|
|
echo $buffer;
|
|
|
|
|
|
?>
|