服务器之家:专注于服务器技术及软件下载分享
分类导航

PHP教程|ASP.NET教程|JAVA教程|ASP教程|

服务器之家 - 编程语言 - PHP教程 - PHP实现动态压缩js与css文件的方法

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

2019-10-09 15:12飞鸿影~ PHP教程

这篇文章主要介绍了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.
 *
 */

 

希望本文所述对大家PHP程序设计有所帮助。

延伸 · 阅读

精彩推荐
  • PHP教程详解php协程知识点

    详解php协程知识点

    本篇文章给大家分享了关于PHP协程的相关知识点内容,有需要的朋友们可以学习参考下。...

    laozhang2712019-09-06
  • PHP教程php+croppic.js实现剪切上传图片功能

    php+croppic.js实现剪切上传图片功能

    最近做项目遇到这样的需求,需要实现裁剪图片上传,接下来通过本文给大家分享基于php+croppic.js实现剪切上传图片功能,需要的朋友可以参考下 ...

    mengchenchen2202019-09-12
  • PHP教程php下intval()和(int)转换使用与区别

    php下intval()和(int)转换使用与区别

    想知道使用intval()和(int)转换有什么区别?或者说两者有什么不同,包括功能、定义方面的。或者和使用频率、效率等。...

    脚本之家4532019-05-29
  • PHP教程Thinkphp5框架使用validate实现验证功能的方法

    Thinkphp5框架使用validate实现验证功能的方法

    这篇文章主要介绍了Thinkphp5框架使用validate实现验证功能的方法,结合实例形式分析了tp5内置的对象validate实现验证的相关操作技巧,需要的朋友可以参考下...

    zhensg3662019-08-28
  • PHP教程PHP实现简易计算器功能

    PHP实现简易计算器功能

    这篇文章主要为大家详细介绍了PHP实现简易计算器功能,具有一定的参考价值,感兴趣的小伙伴们可以参考一下...

    Roninwz1582019-07-26
  • PHP教程CI框架(CodeIgniter)实现的导入、导出数据操作示例

    CI框架(CodeIgniter)实现的导入、导出数据操作示例

    这篇文章主要介绍了CI框架(CodeIgniter)实现的导入、导出数据操作,结合实例形式分析了CodeIgniter框架libraies中引用PHPExcel实现数据导入导出相关操作技巧,需要...

    请叫我郝先生4292019-10-06
  • PHP教程php操作mongodb封装类与用法实例

    php操作mongodb封装类与用法实例

    这篇文章主要介绍了php操作mongodb封装类与用法,结合具体实例形式分析了php定义的MongoDB操作封装类与相关的类实例化、查询、更新等使用技巧,需要的朋友可...

    攻城狮的梦3842019-09-09
  • PHP教程PHP一个简单的无需刷新爬虫

    PHP一个简单的无需刷新爬虫

    今天小编就为大家分享一篇关于PHP一个简单的无需刷新爬虫,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来...

    只是个宝宝5062019-07-07