项目中对模板和js,css文件进行压缩的处理类

来源:互联网 时间:1970-01-01

<?php

/**

* 代码压缩处理

*

* 1.压缩模板文件,去掉所有换行和头尾空格

* 2.压缩js和css文件,生成同名.min.js或.min.css文件

*

* @author 废墟 <r.anerg#gmail.com>

* @version 1.1

* @link http://anerg.com

*

*/

ini_set("memory_limit", -1);

ini_set("display_error", 1);

error_reporting(E_ALL);

date_default_timezone_set('Asia/Shanghai');

define('BASEPATH', dirname(__FILE__));

class Compress_Template {

private $input_dir; //模板源目录

private $output_dir; //压缩后的模板目录

public function __construct($type) {

$this->input_dir = dirname(BASEPATH) . '/application/views_src/';

$this->output_dir = dirname(BASEPATH) . '/application/views/';

$this->js_dir = dirname(BASEPATH) . '/wwwroot/static/js/';

$this->css_dir = dirname(BASEPATH) . '/wwwroot/static/css/';

}

public function run() {

exec('rm ' . $this->output_dir . ' -rf');

$this->compress_file($this->input_dir, $this->output_dir);

$this->compress_js_css();

}

private function compress_js_css() {

exec('for JS in $(find ' . $this->js_dir . ' -type f -name "*.js"|grep -v "min.js"); do java -jar compiler.jar --charset=UTF-8 --compilation_level=SIMPLE_OPTIMIZATIONS --js=$JS --js_output_file=${JS%%.js}.min.js; done');

exec('for CSS in $(find ' . $this->css_dir . ' -type f -name "*.css"|grep -v "min.css"); do java -jar yuicompressor-2.4.7.jar --type css --charset utf-8 -o ${CSS%%.css}.min.css $CSS; done');

}

private function compress_file($input, $output) {

$input = rtrim($input, DIRECTORY_SEPARATOR);

$output = rtrim($output, DIRECTORY_SEPARATOR);

if (is_dir($input)) {

$input .= DIRECTORY_SEPARATOR;

$output .= DIRECTORY_SEPARATOR;

foreach (glob($input . "*") as $path) {

$compress_path = str_replace($input, $output, $path);

if (is_dir($path)) {

if (!is_dir($compress_path)) {

$this->mkpath($compress_path);

}

$this->compress_file($path, $compress_path);

}

if (is_file($path)) {

$data = array_map("trim", file($path));

file_put_contents($compress_path, join('', $data));

}

}

}

}

private function mkpath($path) {

return is_dir($path) or ($this->mkpath(dirname($path)) and (mkdir($path, 0777) and chmod($path, 0777)));

}

}

$app = new Compress_Template();

$app->run();

echo "OK!/n";


相关阅读:
Top