/** * Simplifica el html * @param $input * @return mixed */ function simplificarHTML($input) { if (trim($input) === "") { return $input; } // Remove extra white-space(s) between HTML attribute(s) $input = preg_replace_callback('#<([^\\/\\s<>!]+)(?:\\s+([^<>]*?)\\s*|\\s*)(\\/?)>#s', function ($matches) { return '<' . $matches[1] . preg_replace('#([^\\s=]+)(\\=([\'"]?)(.*?)\\3)?(\\s+|$)#s', ' $1$2', $matches[2]) . $matches[3] . '>'; }, str_replace("\r", "", $input)); // Minify inline CSS declaration(s) if (strpos($input, ' style=') !== false) { $input = preg_replace_callback('#<([^<]+?)\\s+style=([\'"])(.*?)\\2(?=[\\/\\s>])#s', function ($matches) { return '<' . $matches[1] . ' style=' . $matches[2] . minify_css($matches[3]) . $matches[2]; }, $input); } return preg_replace(array('#<(img|input)(>| .*?>)#s', '#(<!--.*?-->)|(>)(?:\\n*|\\s{2,})(<)|^\\s*|\\s*$#s', '#(<!--.*?-->)|(?<!\\>)\\s+(<\\/.*?>)|(<[^\\/]*?>)\\s+(?!\\<)#s', '#(<!--.*?-->)|(<[^\\/]*?>)\\s+(<[^\\/]*?>)|(<\\/.*?>)\\s+(<\\/.*?>)#s', '#(<!--.*?-->)|(<\\/.*?>)\\s+(\\s)(?!\\<)|(?<!\\>)\\s+(\\s)(<[^\\/]*?\\/?>)|(<[^\\/]*?\\/?>)\\s+(\\s)(?!\\<)#s', '#(<!--.*?-->)|(<[^\\/]*?>)\\s+(<\\/.*?>)#s', '#<(img|input)(>| .*?>)<\\/\\1>#s', '#( ) (?![<\\s])#', '#(?<=\\>)( )(?=\\<)#', '#\\s*<!--(?!\\[if\\s).*?-->\\s*|(?<!\\>)\\n+(?=\\<[^!])#s'), array('<$1$2</$1>', '$1$2$3', '$1$2$3', '$1$2$3$4$5', '$1$2$3$4$5$6$7', '$1$2$3', '<$1$2', '$1 ', '$1', ""), $input); }
function compress_file($file, $tipo = 'js') { global $root_dir; $result = file_get_contents($root_dir . 'img/' . $file); $len_antes = strlen($result); echo '<tr><td><b>' . strtoupper($tipo) . '</b></td><td>' . $file . '</td><td align="right"><b>' . num($len_antes) . '</b>bytes</td>'; switch ($tipo) { case 'js': $result = minify_js($result); break; case 'css': $result = minify_css($result); $result = str_replace('url(img/', 'url(lib/kickstart/css/img/', $result); /* corrige URLs de kickstart (codigo malo) */ $result = str_replace('url(\'img/', 'url(\'lib/kickstart/css/img/', $result); /* corrige URLs de kickstart (codigo malo) */ break; } $len_ahora = strlen($result); echo '<td align="right">- <b>' . num($len_antes - $len_ahora) . '</b>bytes = </td><td align="right"><b>' . num($len_ahora) . '</b>bytes</td><td align="right">' . num(100 - $len_ahora * 100 / $len_antes, 1) . '%</td></tr>'; $result = '/* ' . $file . ' */' . "\n" . $result . "\n"; return $result; }
function convertUrl($url, $count) { global $settings, $mimeTypes, $fileDir; static $baseUrl = ''; $url = trim($url); if (preg_match('@^[^/]+:@', $url)) { return $url; } $fileType = substr(strrchr($url, '.'), 1); if (isset($mimeTypes[$fileType])) { $mimeType = $mimeTypes[$fileType]; } elseif (function_exists('mime_content_type')) { $mimeType = mime_content_type($url); } else { $mimeType = null; } if (!$settings['embed'] || !file_exists($fileDir . $url) || $settings['embedMaxSize'] > 0 && filesize($fileDir . $url) > $settings['embedMaxSize'] || !$fileType || in_array($fileType, $settings['embedExceptions']) || !$mimeType || $count > 1) { if (strpos($_SERVER['REQUEST_URI'], $_SERVER['SCRIPT_NAME'] . '?') === 0 || strpos($_SERVER['REQUEST_URI'], rtrim(dirname($_SERVER['SCRIPT_NAME']), '\\/') . '/?') === 0) { if (!$baseUrl) { return $fileDir . $url; } } return $baseUrl . $url; } $contents = file_get_contents($fileDir . $url); if ($fileType == 'css') { $oldFileDir = $fileDir; $fileDir = rtrim(dirname($fileDir . $url), '\\/') . '/'; $oldBaseUrl = $baseUrl; $baseUrl = 'http' . (@$_SERVER['HTTPS'] ? 's' : '') . '://' . $_SERVER['HTTP_HOST'] . rtrim(dirname($_SERVER['SCRIPT_NAME']), '\\/') . '/' . $fileDir; $contents = minify_css($contents); $fileDir = $oldFileDir; $baseUrl = $oldBaseUrl; } $base64 = base64_encode($contents); return 'data:' . $mimeType . ';base64,' . $base64; }
/** * Compiles, and minifies a file * @param $file string The filename to process */ function parseFile($file) { echo "Compiling {$file}\n"; $contents = file_get_contents($file); $extension = ""; if (strpos($file, ".coffee")) { $ar = compile_coffee($contents, true, $file); $contents = $ar["contents"]; $file = $ar["file"]; $extension = ".js"; } if (strpos($file, ".js") || $extension == ".js") { $ar = minify_js($contents, true, $file); $contents = $ar["contents"]; $file = $ar["file"]; $extension = ".min.js"; } if (strpos($file, ".css")) { $ar = minify_css($contents, true, $file); $contents = $ar["contents"]; $file = $ar["file"]; $extension = ".min.css"; } }
function regenere_css($css_file, $css) { global $auto_css; $values = array(); $_debut = chrono(); // get content of master css file (if specified, $css_file!='') // or use the content of $css to generate the merged file if ($css_file != '') { $css = file_get_contents($auto_css['path_to_css_file'] . $css_file); } else { $css_file = $auto_css['merged_css_filename']; } // burn all non auto_css comments $css = preg_replace('#\\/\\*[^*=]+\\*/#', ' ', $css); // extract from comments preg_match_all('#\\/\\*([^*]+\\=[^*]+)\\*/#', $css, $init); $variables = implode($init[0], " \n "); // process values $nb = preg_match_all('#([^\\:\\t =;"\']+)[ +]?=[ +]?\\"(.+)(?=\\")#', $variables, $vars); if (count($vars[1]) > 0) { $values = array_combine($vars[1], $vars[2]); } // process functions $_ = '[ +]?'; $reg_nb = '([0-9]+)'; $reg_colORvar = '(\\#[a-fA-F0-9]+|[^\\: =;"\']+)'; $reg_path = '("?[a-zA-Z0-9./_-]+"?)'; $reg_var = '([^\\: =;"\'\\<\\>\\)]+)'; $reg_darkenlight = '(lighten|darken)\\(' . $reg_colORvar . $_ . ',' . $_ . $reg_nb; $reg_reverse = '(reverse)\\(' . $reg_colORvar; $reg_dimensions = '(dimensions)\\(' . $reg_path; $regex = '#' . $reg_var . $_ . '=' . $_ . '(?:(?:' . $reg_darkenlight . ')|(?:' . $reg_reverse . ')|(?:' . $reg_dimensions . '))(?=\\))#'; $nb = preg_match_all($regex, $variables, $vars); if ($nb > 0) { for ($i = 0; $i < count($vars[1]); $i++) { // every variables in css if ($vars[2][$i] != '') { // lighten/darken $function = $vars[2][$i]; $firstarg = $vars[3][$i]; $secondarg = $vars[4][$i]; if ($firstarg[0] == '#') { $values[$vars[1][$i]] = $function($firstarg, $secondarg); } else { $values[$vars[1][$i]] = $function($values[$firstarg], $secondarg); } // function with variable } if ($vars[5][$i] != '') { // reverse $function = $vars[5][$i]; $firstarg = $vars[6][$i]; if ($firstarg[0] == '#') { $values[$vars[1][$i]] = $function($firstarg); } else { $values[$vars[1][$i]] = $function($values[$firstarg]); } // function with variable } if ($vars[7][$i] != '') { // dimensions $function = $vars[7][$i]; $firstarg = $vars[8][$i]; if ($firstarg[0] == '"') { $values[$vars[1][$i]] = $function($auto_css['path_to_css_file'] . str_replace('"', '', $firstarg)); } else { $values[$vars[1][$i]] = $function($auto_css['path_to_css_file'] . $values[$firstarg]); } // width variable } } } // remove parameters comments $css = preg_replace('#\\/\\*[^*]+\\=[^*]+\\*/#', ' ', $css); // and replaces all the keys with the values $var = array_keys($values); $var = array_map('trim', $var); $rempl = array_values($values); //Here, auto_css applies your string replacement rules; if ($auto_css['use_values_as_regex_rules']) { // values are regex rules $css = preg_replace($var, $rempl, $css); } else { // values are only a simple string replacement while ($css != str_replace($var, $rempl, $css)) { $css = str_replace($var, $rempl, $css); } } // here, it applies its own replacement rules if ($auto_css['allow_auto_css_regex_replacement']) { $css = auto_parse($css); } if (!$auto_css['reset_css_added']) { // adds reset css only to first file $css = addreset() . $css; $auto_css['reset_css_added'] = true; } if ($auto_css['minifie'] == true) { $css = minify_css($css); } $t = round(chrono() - $_debut, 6); $css = '/*Generated in ' . $t . 's with auto_css v' . $auto_css['version'] . '*/' . "\n" . $css; // save computed css file_put_contents($auto_css['path_to_css_file'] . 'computed_' . $css_file, $css); // coordinate all the dates $date_css = time(); touch($auto_css['path_to_css_file'] . 'computed_' . $css_file, $date_css); touch(me(), $date_css); }
/** * Performs minifying. * * This is best called from SysAdmin. * @param array $paths Array fo paths to scan for content * @param string $target_base_name Base name for the minify files * @param string $nc_argument NoCache argument to add to the filename * @return void */ function minify_all($paths, $target_base_name, $nc_argument) { $target_base_name .= isSSL() ? ".1" : ".0"; foreach (system_glob($target_base_name . ".*.*") as $f) { unlink($f); } $v = preg_replace('/[^\\d]*/', "", $nc_argument); minify_js($paths, $target_base_name . ".{$v}.js"); minify_css($paths, $target_base_name . ".{$v}.css", $v); }
/** * JS/CSS minification function * * @param string $code Code to minify * @param string $type Type: 'js' or 'css' * * @return string Minified code */ public static function minify($code, $type = 'js') { if ($type == 'js') { require_once './lib/jsmin.php'; $code = JSMin::minify($code); } elseif ($type == 'css') { require_once './lib/cssmin.php'; $code = minify_css($code); } return $code; }
*/ $scripts = array('functions.js', 'load-comic.js', 'clicks.js', 'templates/home-page.js', 'templates/error-404-page.js', 'templates/legal-notice-page.js', 'templates/root-page.js', 'translation.js', 'handle-back-click.js', 'init.js'); $script_path = $base_path . 'scripts/'; $combined_scripts = ' var home_url = "' . $base_url . '"; '; foreach ($scripts as $script) { $combined_scripts .= file_get_contents($script_path . $script); } $minified_script = minify_js($combined_scripts); file_put_contents($base_path . 'public_html/minified.js', $minified_script); /** * Minifying CSS. */ $css = file_get_contents('style.css'); $minified_css = minify_css($css); file_put_contents($base_path . 'public_html/minified.css', $minified_css); /** * Minify HTML. */ ob_start(); ?> <!DOCTYPE html> <html lang="en_US"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width"> <link rel="profile" href="http://gmpg.org/xfn/11"> <title>Comic Jet</title> <link rel="stylesheet" href="<?php echo $base_url;
<style type="text/css"> <?php $cssFiles = array('styles.css'); $buffer = ''; foreach ($cssFiles as $cssFile) { $buffer .= file_get_contents($cssFile); } echo minify_css($buffer); ?> </style> <?php function minify_css($input) { $input = preg_replace('!/\\*[^*]*\\*+([^/][^*]*\\*+)*/!', '', $input); $input = str_replace(': ', ':', $input); return str_replace(array("\r\n", "\r", "\n", "\t", ' ', ' ', ' '), '', $input); }
/** * 压缩文件生成 file.pack.js的文件, ============================ 压缩的具体实现部分 ====================== * 并返回改文件的路径 * * @param mixed $filePath "sys/index.css" * @return 生成文件的相对路径 */ private function Compress($sourceFile) { $strArray = split("/", $sourceFile); //=sys/index.css $strTemp = "release/" . join("/", array_slice($strArray, 1)); //release/index.css $from_Str = "." . $this->Site["FileType"]; //.css $replace_Str = ".p." . $this->Site["FileType"]; //.p.css $packFilePath = str_replace($from_Str, $replace_Str, $strTemp); //上面是完成这样的一个路径转换 //sys/index.css => release/index.css => release/index.p.css $__sourceFile = $this->getPath($sourceFile); $__packFilePath = $this->getPath($packFilePath); //Begin:开始压缩 if ($this->Site["FileType"] == "css") { minify_css($__sourceFile, $__packFilePath); } else { if ($this->Site["FileType"] == "js") { minify_javascript($__sourceFile, $__packFilePath); } } //End return $packFilePath; }
public static final function compress_cssjs() { if (count(self::$compress_files) == 0) { return false; } $lancement_compression = false; foreach (self::$compress_files as $dn_compress) { $dir = sprintf($dn_compress[0], self::$design); $file = $dn_compress[1]; $type = $dn_compress[2]; /** * Si le fichier a bien été modifié, on lance la compression **/ if (!is_file($dir . $file . '_min.' . $type)) { if ($type == 'css') { $content_file = minify_css($dir . $file . '.' . $type); } $content_file = str_replace("\n", '', $content_file); file_put_contents($dir . $file . '_min.' . $type, $content_file); $lancement_compression = true; } } // Si un fichier a été minifié, on met à jour le fichier cache des dernières modifications if ($lancement_compression) { self::gen_last_cache_file(); } }
/** * Beta! * Build or load minified CSS and return an output. * @param string $css_file css file with relative name * @param string $group CSS group name for caching * @return string */ public function LoadMinifyCSS($css_file, $group = 'css') { if (empty($css_file)) { return ''; } //build hash key $key = ''; //get file time stamp $key .= $css_file . "-" . filemtime($this->templateResource($css_file, 'file')); $key = $group . "." . AEncryption::getHash($group . '-' . $key); //check if hash is created and load $css_data = $this->cache->pull($key); if ($css_data === false) { require_once DIR_CORE . 'helper/html-css-js-minifier.php'; //build minified css and save $path = dirname($this->templateResource($css_file, 'http')); $new_content = file_get_contents($this->templateResource($css_file, 'file')); //replace relative directories with full path $css_data = preg_replace('/\\.\\.\\//', $path . '/../', $new_content); $css_data = minify_css($css_data); $this->cache->push($key, $css_data); } return $css_data; }
function inline_css($url, $minify = true) { $base_url = get_bloginfo('wpurl'); $path = false; if (strpos($url, $base_url) !== FALSE) { $path = str_replace($base_url, rtrim(ABSPATH, '/'), $url); } elseif ($url[0] == '/' && $url[1] != '/') { // url like /wp-conten/... and not like //google.com/... $path = rtrim(ABSPATH, '/') . $url; $url = $base_url . $url; } if ($path && file_exists($path)) { $css = file_get_contents($path); if ($minify) { $css = minify_css($css); } $css = fix_css_urls($css, $url); echo $css; return true; } else { //~ echo "/* !!! can not open file {$url}[{$path}] !!! */"; return false; } }
<?php if (!isset($_GET['f'])) { exit; } include '../base.php'; $out = ''; foreach ($_GET['f'] as $file) { if (!file_exists($path = ABS_PATH . $file)) { continue; } $content = file_get_contents($path); $out .= minify_css($content); } header('Content-Type: text/css'); echo $out;