这篇文章主要介绍了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="Jmx0OyYjNjM7cGhwIGVjaG8gJGpzX3BhdGggJiM2MzsmZ3Q7"></script>
<!--下面可以继续放不能压缩或者不想压缩的文件-->
<script src="aHR0cDovL3Jlcy53eC5xcS5jb20vb3Blbi9qcy9qd2VpeGluLTEuMC4wLmpz"></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.
*
*/
PS:这里再为大家推荐几款相似的在线工具供大家参考:
JavaScript压缩/格式化/加密工具:
http://tools.mobange.com/code/jscompress
在线CSS代码压缩、格式化工具:
http://tools.mobange.com/code/css
更多关于PHP相关内容感兴趣的读者可查看本站专题:《php文件操作总结》、《PHP目录操作技巧汇总》、《PHP基本语法入门教程》、《PHP运算与运算符用法总结》、《php字符串(string)用法总结》、《PHP数组(Array)操作技巧大全》、《PHP数据结构与算法教程》及《php程序设计算法总结》
希望本文所述对大家PHP程序设计有所帮助。
本文标题为:PHP实现动态压缩js与css文件的方法
- windows下9款一键快速搭建PHP本地运行环境的好工具(含php7.0环境) 2023-09-02
- Laravel balde模板文件中判断数据为空方法 2023-08-30
- laravel实现按月或天或小时统计mysql数据的方法 2023-02-22
- PHP仿tp实现mvc框架基本设计思路与实现方法分析 2022-10-18
- 用nohup命令实现PHP的多进程 2023-09-02
- php微信公众号开发之秒杀 2022-11-23
- PHP中PDO事务处理操作示例 2022-10-15
- laravel通用化的CURD的实现 2023-03-17
- PHP简单实现二维数组的矩阵转置操作示例 2022-10-02
- PHP实现微信支付(jsapi支付)流程步骤详解 2022-10-09