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

项目里引用到第三方类库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

分享到: