@52fhy
        
        2015-10-14T08:10:12.000000Z
        字数 2687
        阅读 547
    PHP
正式发布产品时,我们希望将项目里的js,css合并压缩,以减少http请求、防止轻易查看源代码。
只需要在头部引入一下代码即可:
<meta charset="utf-8"/><title>demo</title><?php//定义需要压缩的文件$css = array(CSS_PATH . 'base.css',CSS_PATH . 'style.css',CSS_PATH . 'my.css');$js = array(PUB_PATH . '/lib/zepto.min.js',PUB_PATH . '/js/1.js',JS_PATH . '2.js',);$css_path = base_url(parse_css($css));$js_path = base_url(parse_script($js));?><link rel="stylesheet" type="text/css" href="<?php echo $css_path ?>"><script src="<?php echo $js_path ?>"></script><!--下面可以继续放不能压缩或者不想压缩的文件--><script src="http://res.wx.qq.com/open/js/jweixin-1.0.0.js"></script>
这段代码会在指定的目录(例如common/)里生成压缩过后的js和css.每次更新了js,css内容,请先删除生成的压缩文件。
示例:
4e387d5edce14cc2bd6396f6ebb7921b.css7c10211f113f3175489196d336d67734.js
注意: 
编写的css和js文件一定要符合规范。例如一定要加分号。js的function可以不加分号。
/*** 合并压缩css*/function parse_css($urls){$url = md5(implode(',', $urls));$path = FCPATH. 'static/parse/';$css_url = $path . $url . '.css';if (!file_exists($css_url)) {if (!file_exists($path))mkdir($path, 0777);$css_content = '';foreach ($urls as $url) {$css_content .= @file_get_contents($url);}$css_content = str_replace("\r\n", '', $css_content); //清除换行符$css_content = str_replace("\n", '', $css_content); //清除换行符$css_content = str_replace("\t", '', $css_content); //清除制表符$css_content = str_replace("../images/", "./../common/images/", $css_content);@file_put_contents($css_url, $css_content);}$css_url = str_replace(FCPATH, '', $css_url);return $css_url;}/*** 合并压缩js*/function parse_script($urls){$url = md5(implode(',', $urls));$path = FCPATH. '/static/parse/';$js_url = $path . $url . '.js';if (!file_exists($js_url)) {if (!file_exists($path))mkdir($path, 0777);load_qy_lib('JavaScriptPacker');$js_content = '';foreach ($urls as $url) {$append_content = @file_get_contents($url) . "\r\n";$packer = new JavaScriptPacker($append_content);$append_content = $packer->_basicCompression($append_content);$js_content .= $append_content;}@file_put_contents($js_url, $js_content);}$js_url = str_replace(FCPATH, '', $js_url);return $js_url;}
项目里引用到第三方类库JavaScriptPacker可以在github下载:
gkralik/php-uglifyjs
https://github.com/gkralik/php-uglifyjs
/*** 9 April 2008. version 1.1** This is the php version of the Dean Edwards JavaScript's Packer,* Based on :** ParseMaster, version 1.0.2 (2005-08-19) Copyright 2005, Dean Edwards* a multi-pattern parser.* KNOWN BUG: erroneous behavior when using escapeChar with a replacement* value that is a function** packer, version 2.0.2 (2005-08-19) Copyright 2004-2005, Dean Edwards** License: http://creativecommons.org/licenses/LGPL/2.1/** Ported to PHP by Nicolas Martin.** ----------------------------------------------------------------------* changelog:* 1.1 : correct a bug, '\0' packed then unpacked becomes '\'.* ----------------------------------------------------------------------** Changes:* 2014-08-28: grkalik: change class for composer support. no functionality change.**/