php css合并单元格,PHP版CSS文件合并工具(相同类名合并,多文件合并成一个)...

//php deal_css.php path_to_css_files output_single_file_path

//php deal_css.php css文件存放的目录 合并后的文件的路径(文件名)

//php deal_css.php ./ one.css 1

define('CMP', $argv>3?$argv[3]:true);//压缩

if(CMP){

echo 'Will compress!'.chr(10);

define('SPA','');

define('TAB','');

define('NL','');

}else{

define('SPA',' ');

define('NL',"\n");

}define('TAB',"\t");

if($argv[2])file_put_contents($argv[2], '@charset "utf-8";'."\r\n");

_scanDir($argv[1]);

function _scanDir($_dir){

global $argv;

//if(strlen(str_replace('/','',$_dir))<3) return;//防止删除/,增强安全性

$dirs = scandir($_dir);

if(count($dirs)<3) return;// echo $_dir.' is empty!'.chr(10);

foreach($dirs as $dir){

if($dir=='.'||$dir=='..') continue;

$dir= $_dir.'/'.$dir;

if(is_dir($dir))

_scanDir($dir);

else{

if(strtolower(substr($dir,-3))=='css' && strpos($dir,$argv[2])===false){

compressOneCss($dir, $argv[2]);

}

}

}

}

function replaceNote($str){

$pos0 = strpos($str,'/*');

while($pos0!==false){

$pos1 = strpos($str,'*/');

if($pos1===false){

$pos0+=2;

}else{

$rp = substr($str,$pos0,$pos1-$pos0+2);

$str = str_replace($rp,'',$str);

$pos0 = strpos($str,'/*');

}

}

$str = str_replace(';',";\r\n",$str);

if(strlen($str)<100) echo $str;

return $str;

}

function compressOneCss($_filepath,$_savepath=''){

$single_mode = true;

if(!$_savepath){

$_savepath = $_filepath;

$single_mode = false;

}

$str = file_get_contents($_filepath);

//去掉所有注释

//$str = preg_replace('/\/\*(([^\*]+\*[^\/])?([^\*]+)?)*\*\//', '',$str);

//$str = str_replace(';',";\r\n",replaceNote($str));

$str = replaceNote($str);

preg_match_all("/([^{]+)\{([^}]*)}/", $str, $out);

$arr = array();

$count = count($out[0]);

echo 'There are '.$count.' css classes in '.$_filepath.'('.strlen($str).')'.chr(10);

for($i=0;$i

$out[1][$i] = trim($out[1][$i]);

$left = substr($out[1][$i],0,1);

if($left=='.'){

$left = '__dot';

$right = substr($out[1][$i],1);

}else if($left=='#'){

$left = '__jin';

$right = substr($out[1][$i],1);

}else if($left=='@'){

//echo "\033[37;7m".$out[1][$i]."\033[0m\n"

echo "=>".$out[1][$i]." skiped\n";;

}else if($left=='*'){

$left = '__xin';

$right = substr($out[1][$i],1);

}else {

$left = '__emp';

$right = $out[1][$i];

echo '['.$out[1][$i].']'.chr(10);

}

$right = trim($right);

$cls = $left.$right;

if(isset($arr[$cls])) $arr[$cls] = array();

$stys = explode(';', $out[2][$i]);

$count_stys = count($stys);

for($j=0;$j

$tmp = explode(':', $stys[$j]);

if(count($tmp)==2){

$arr[$cls][trim($tmp[0])] = trim($tmp[1]);

}else if(strlen(trim($stys[$j]))>0){

echo 'Error('.$_filepath.'): '.$stys[$j].','.$out[2][$i].chr(10);

}

}

}

unset($str);

if(!$single_mode){

copy ( $_filepath , $_filepath.'.bak' );

file_put_contents($_savepath, '');

}

file_put_contents($_savepath, "\r\n".'/*'.$_filepath.'*/'."\r\n", FILE_APPEND);

foreach($arr as $cls=>$v){

$pre = substr($cls,0,5);

$left = substr($cls,5);

if($pre=='__dot'){

$cls = '.'.$left;

}else if($pre=='__jin'){

$cls = '#'.$left;

}else if($pre=='__xin'){

$cls = '*'.$left;

}else if($pre=='__emp'){

$cls = $left;

}

file_put_contents($_savepath, $cls.'{'.NL, FILE_APPEND);

$tmp = $cls.'{'.NL;

foreach ($v as $sty=>$txt)

file_put_contents($_savepath, TAB.$sty.':'.SPA.$txt.";".NL, FILE_APPEND);

file_put_contents($_savepath, '}'."\r\n", FILE_APPEND);

}

unset($arr);

}

我的QQ群:

PHPer&Webgame&移动开发,群号:95303036

加群除了提问之外,请记得帮助别人,谢谢。

群名称是: PHPer&页游&Mobile&U3D 2D

群号:95303036

加群除了提问之外,请记得帮助别人,谢谢。

----------------------------------再发个广告,网上买家具便宜1/4,还包邮。点图进入,支持下我老婆。0818b9ca8b590ca3270a3433284dd417.png

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
现在大量网站为了追求用户体验,使用了大量使用CSS和JS文件。 而网页加载的时间大部分是消耗在资源请求部分。通过 Chrome自带调试工具,或者 Firebug 可观察到: 资源加载的等待时间经常占到总时间的 50%以上。 再比如,IE6默认只有2个下载线程!也就是说,同时只能进行2个资源请求、无论你网速有多快。 所以网页前端速度优化的一个重要项目就是:减小资源请求数。 事实上,业界有很有名气的js,css合并压缩开源程序:minify。 但悲剧的 minify 在 php5.3 , php 5.4 环境下无法使用,于是逼的我只好自己丰衣足食。 minify 比较重量级,很臃肿。它采用了将合并文件写入硬盘的方式。 本程序只是合并、压缩,直接讲合并结果发送客户端,并采用修改过期时间优化效率,最大限度减小服务器压力。 这样做法的效率就非常非常接近于 minify。 本程序碎玉压缩合并的功能俱全,但是整体及其轻量级,很容易更新、维护,二次开发。 本程序压缩后的大小大约为压缩前的 15% - 30% 左右(平均值)。推荐使用 YSlow 进行另外方面的优化。 如果您在使用中,发现任何 Bug ,请给我反馈,谢谢。 Javascript 代码压缩 网址 : http://julying.com/lab/compress-js-css/ 类型: 原创脚本 作者: 王子墨 邮箱 : i@julying.com 发布 : 2012-06-10 22:28 更新 : 2012-07-22 12:50 权所有 2012 | julying.com 此插件遵循 MIT、GPL2、GNU 许可. 权:Copyright (c) julying 权所有,本程序为开源程序(开放源代码)。 http://julying.com/code/license/ 此程序会自动去除 注释,并且会对文件名进行安全检测、去重复、存在判定等操作,只允许 .js/.css 文件,并且不允许包含远程文件。 环境要求: >= PHP 5 压缩多个 js 方法: [removed] [removed] 压缩多个 CSS 方法: <link rel="stylesheet" media="all" href="http://julying.com/lab/compress-js-css/file=/lab/coffee/layerImages/layer.css,/lab/coffee/css/main.css"> </link> / 建议查看可看 《Yahoo工程师的前端优化建议--英文原》. 如果英文阅读不是很流畅,请查看翻译本: 《Yahoo工程师的前端优化建议-- 中文翻译》 《Yahoo工程师的前端优化建议-- 中文翻译
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值