PHP实现动态压缩js与css文件的方法
发布:smiling 来源: PHP粉丝网 添加日期:2021-09-16 10:38:49 浏览: 评论:0
这篇文章主要介绍了PHP实现动态压缩js与css文件的方法,涉及php文件读写及字符串替换等相关操作技巧,需要的朋友可以参考下。
本文实例讲述了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.
- *
- */
Tags: PHP动态压缩js
推荐文章
热门文章
最新评论文章
- 写给考虑创业的年轻程序员(10)
- PHP新手上路(一)(7)
- 惹恼程序员的十件事(5)
- PHP邮件发送例子,已测试成功(5)
- 致初学者:PHP比ASP优秀的七个理由(4)
- PHP会被淘汰吗?(4)
- PHP新手上路(四)(4)
- 如何去学习PHP?(2)
- 简单入门级php分页代码(2)
- php中邮箱email 电话等格式的验证(2)