PHP实现动态压缩js与css文件的方法


Posted in PHP onMay 02, 2018

本文实例讲述了PHP实现动态压缩js与css文件的方法。分享给大家供大家参考,具体如下:

正式发布产品时,我们希望将项目里的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 ?>" rel="external nofollow" >
<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.css
7c10211f113f3175489196d336d67734.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.
 *
 */
PHP 相关文章推荐
一个颜色轮换的简单例子
Oct 09 PHP
php实现统计邮件大小的方法
Aug 06 PHP
php 获取SWF动画截图示例代码
Feb 10 PHP
linux下安装php的memcached客户端
Aug 03 PHP
深入理解PHP中的global
Aug 19 PHP
php生成rss类用法实例
Apr 14 PHP
使用PHP进行微信公众平台开发的示例
Aug 21 PHP
php语言中使用json的技巧及json的实现代码详解
Oct 27 PHP
深入理解PHP JSON数组与对象
Jul 19 PHP
Yii2配置Nginx伪静态的方法
May 05 PHP
基于php流程控制语句和循环控制语句(讲解)
Oct 23 PHP
PHP+Oracle本地开发环境搭建方法详解
Apr 01 PHP
Yii2框架数据验证操作实例详解
May 02 #PHP
Yii2框架类自动加载机制实例分析
May 02 #PHP
PHP通过bypass disable functions执行系统命令的方法汇总
May 02 #PHP
购物车实现的几种方式优缺点对比
May 02 #PHP
PHP生成(支持多模板)二维码海报代码
Apr 30 #PHP
PHP实现的猴王算法(猴子选大王)示例
Apr 30 #PHP
PHP+MySQL高并发加锁事务处理问题解决方法
Apr 30 #PHP
You might like
作为程序员必知的16个最佳PHP库
2015/12/09 PHP
Zend Framework实现自定义过滤器的方法
2016/12/09 PHP
浅谈PHP命令执行php文件需要注意的问题
2016/12/16 PHP
javascript 匿名函数的理解(透彻版)
2010/01/28 Javascript
nodejs npm install全局安装和本地安装的区别
2014/06/05 NodeJs
浅谈JavaScript 框架分类
2014/11/10 Javascript
jQuery构造函数init参数分析
2015/05/13 Javascript
jquery插件jquery.LightBox.js实现点击放大图片并左右点击切换效果(附demo源码下载)
2016/02/25 Javascript
jQuery文本框得到与失去焦点动态改变样式效果
2016/09/08 Javascript
前端 Vue.js 和 MVVM 详细介绍
2016/12/29 Javascript
微信小程序 两种为对象属性赋值的方式详解
2017/02/23 Javascript
关于在vue-cli中使用微信自动登录和分享的实例
2017/06/22 Javascript
Vue头像处理方案小结
2018/07/26 Javascript
深入理解Vue 的钩子函数
2018/09/05 Javascript
Angular resolve基础用法详解
2018/10/03 Javascript
微信小程序 调用微信授权窗口相关问题解决
2019/07/25 Javascript
jquery树形插件zTree高级使用详解
2019/08/16 jQuery
JS中async/await实现异步调用的方法
2019/08/28 Javascript
微信小程序仿通讯录功能
2020/04/09 Javascript
Python写的Discuz7.2版faq.php注入漏洞工具
2014/08/06 Python
pandas值替换方法
2018/07/10 Python
python numpy元素的区间查找方法
2018/11/14 Python
Python Django简单实现session登录注销过程详解
2019/08/06 Python
详解matplotlib绘图样式(style)初探
2021/02/03 Python
不同浏览器对CSS3和HTML5的支持状况
2009/10/31 HTML / CSS
error和exception有什么区别
2012/10/02 面试题
党的群众路线教育实践活动心得体会900字
2014/03/07 职场文书
公司联欢会策划方案
2014/05/19 职场文书
2014年预备党员学习新党章思想汇报
2014/09/15 职场文书
2014年向国旗敬礼活动方案
2014/09/27 职场文书
护士自荐信怎么写
2015/03/06 职场文书
教师个人师德工作总结2015
2015/05/12 职场文书
闪闪红星观后感
2015/06/08 职场文书
房屋所有权证明
2015/06/19 职场文书
发票退票证明
2015/06/24 职场文书
2016三八妇女节校园广播稿
2015/12/17 职场文书