当前位置:首页 > PHP教程 > php应用 > 列表

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

发布:smiling 来源: PHP粉丝网  添加日期:2021-09-16 10:38:49 浏览: 评论:0 

这篇文章主要介绍了PHP实现动态压缩js与css文件的方法,涉及php文件读写及字符串替换等相关操作技巧,需要的朋友可以参考下。

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

正式发布产品时,我们希望将项目里的js,css合并压缩,以减少http请求、防止轻易查看源代码。

使用只需要在头部引入一下代码即可:

  1. <meta charset="utf-8"/> 
  2. <title>demo</title> 
  3. <?php 
  4. //定义需要压缩的文件 
  5. $css = array( 
  6. CSS_PATH . 'base.css'
  7. CSS_PATH . 'style.css'
  8. CSS_PATH . 'my.css' 
  9. ); 
  10. $js = array( 
  11. PUB_PATH . '/lib/zepto.min.js'
  12. PUB_PATH . '/js/1.js'
  13. JS_PATH . '2.js'
  14. ); 
  15. $css_path = base_url(parse_css($css)); 
  16. $js_path = base_url(parse_script($js)); 
  17. ?> 
  18. <link rel="stylesheet" type="text/css" href="<?php echo $css_path ?>" rel="external nofollow" > 
  19. <script src="<?php echo $js_path ?>"></script> 
  20. <!--下面可以继续放不能压缩或者不想压缩的文件--> 
  21. <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可以不加分号。

引用的资源

  1. /** 
  2. *  合并压缩css 
  3. */ 
  4. function parse_css($urls
  5.   $url = md5(implode(','$urls)); 
  6.   $path = FCPATH. 'static/parse/'
  7.   $css_url = $path . $url . '.css'
  8.   if (!file_exists($css_url)) { 
  9.     if (!file_exists($path)) 
  10.       mkdir($path, 0777); 
  11.     $css_content = ''
  12.     foreach ($urls as $url) { 
  13.       $css_content .= @file_get_contents($url); 
  14.     } 
  15.     $css_content = str_replace("\r\n"''$css_content); //清除换行符 
  16.     $css_content = str_replace("\n"''$css_content); //清除换行符 
  17.     $css_content = str_replace("\t"''$css_content); //清除制表符 
  18.     $css_content = str_replace("../images/""./../common/images/"$css_content); 
  19.     @file_put_contents($css_url$css_content); 
  20.   } 
  21.   $css_url = str_replace(FCPATH, ''$css_url); 
  22.   return $css_url
  23. /** 
  24. *  合并压缩js 
  25. */ 
  26. function parse_script($urls
  27.   $url = md5(implode(','$urls)); 
  28.   $path = FCPATH. '/static/parse/'
  29.   $js_url = $path . $url . '.js'
  30.   if (!file_exists($js_url)) { 
  31.     if (!file_exists($path)) 
  32.       mkdir($path, 0777); 
  33.     load_qy_lib('JavaScriptPacker'); 
  34.     $js_content = ''
  35.     foreach ($urls as $url) { 
  36.       $append_content = @file_get_contents($url) . "\r\n"
  37.       $packer = new JavaScriptPacker($append_content); 
  38.       $append_content = $packer->_basicCompression($append_content); 
  39.       $js_content .= $append_content
  40.     } 
  41.     @file_put_contents($js_url$js_content); 
  42.   } 
  43.   $js_url = str_replace(FCPATH, ''$js_url); 
  44.   return $js_url

项目里引用到第三方类库JavaScriptPacker可以在github下载:

gkralik/php-uglifyjs

https://github.com/gkralik/php-uglifyjs

  1. /** 
  2.  * 9 April 2008. version 1.1 
  3.  * 
  4.  * This is the php version of the Dean Edwards JavaScript's Packer, 
  5.  * Based on : 
  6.  * 
  7.  * ParseMaster, version 1.0.2 (2005-08-19) Copyright 2005, Dean Edwards 
  8.  * a multi-pattern parser. 
  9.  * KNOWN BUG: erroneous behavior when using escapeChar with a replacement 
  10.  * value that is a function 
  11.  * 
  12.  * packer, version 2.0.2 (2005-08-19) Copyright 2004-2005, Dean Edwards 
  13.  * 
  14.  * License: http://creativecommons.org/licenses/LGPL/2.1/ 
  15.  * 
  16.  * Ported to PHP by Nicolas Martin. 
  17.  * 
  18.  * ---------------------------------------------------------------------- 
  19.  * changelog: 
  20.  * 1.1 : correct a bug, '\0' packed then unpacked becomes '\'. 
  21.  * ---------------------------------------------------------------------- 
  22.  * 
  23.  * Changes: 
  24.  * 2014-08-28: grkalik: change class for composer support. no functionality change. 
  25.  * 
  26.  */

Tags: PHP动态压缩js

分享到: