JavaScript 压缩/混淆/格式化批处理工具 API 与 PHP 实现

作者:桌面漫游时间:2026-10-25 15:56:57浏览:141

本文介绍一款支持JavaScript压缩、混淆和格式化的批处理工具。通过开放API接口,用户可以使用CURL等工具进行数据交互。文章提供了详细的PHP脚本示例,展示如何调用该API对目录下的JS文件进行批量处理,包括合并、压缩、格式化等功能,并附带参数说明和返回结果示例。

工具介绍与API开放

此前分享了 http://jscompress.sinaapp.com/ 这一小工具后,发现其颇受用户欢迎。

为此,今日将其功能进行了JSON化处理,采用JSON格式传输数据,并开放了API接口。

 

本工具的所有功能实现均依赖于 http://jscompress.sinaapp.com/api 接口处理(包括当前可用的在线压缩功能)。所有数据交换均通过HTTP POST输入,处理后以JSON格式输出。

API参数说明:http://jscompress.sinaapp.com/api?get={type}&code=(code)&type={compress only}


get={type},{type} 为可选的 compress (压缩) format (格式化) shuffle(混淆) 
code=(code),(code) 为必要的源代码. JavaScript的源代码 
type={compress},{compress} 注意该参数只有压缩的时候生效,可选 1(默认压缩) 2(YUI压缩) 3(GC压缩)

例如,使用CURL发送POST请求。

http://jscompress.sinaapp.com/api?get=compress&code=var a=1;var b=2;&type=2


如果执行成功则返回结果:

{"code":"var a=1,b=2;\n","original_size":"16 Byte","now_size":"13 Byte","status":"Closure Compiler \u538b\u7f29\u5b8c\u6210.","minify":"81.25%"}

 

PHP批处理脚本实现

随后,我编写了一个PHP文件,用于调用该网站的API,将指定目录下的所有JS文件进行压缩、混淆或格式化处理后,保存至新目录。

这样便为那些懒得手动上传文件的用户提供了便利。

直接下载地址:jstools.rar(高亮显示)

代码如下:

 
<?php
/* 
/## js 合并和压缩PHP脚本...可用于本地或者服务器.
/## 本工具只能处理utf-8编码的 *.js 文件.否则会接收不到结果
@ 风吟 (fengyin.name)
@ http://jscompress.sinaapp.com/
*/ 
set_time_limit(0);
function JsTools($options = array(
'basepath' =>'./', //需要处理的脚本路径...
'compiled' =>'./compiled/', //处理后新文件的路径...
'type' =>'compress', //可选 compress (压缩) format (格式化) shuffle (混淆)
'is_merger' =>true, // 是否需要把全部文件合并再进行处理 (压缩,格式化,混淆)
'engine' =>'1'//此项只对 type 为 compress 时有效,1(默认) 2 (yui) 3(Closure Compiler)
/* 
yui 和 Google Closure Compiler 压缩是不可逆的,一般情况下使用默认即可
不推荐使用混淆.
*/ 
)){ 
if (is_dir($options['basepath'])) {
if ($dh = opendir($options['basepath'])) {
while (($file = readdir($dh)) !== false) {
if (strpos($file, '.js') !== false && strpos($file, '.min.js') === false) {
$js[] = $file;
} 
} 
closedir($dh);
} 
} 
if ($options['is_merger']) {
foreach($js as $jsfile) {
$jscode.= file_get_contents($jsfile).';';
} 
$jscode = json_decode(api($jscode, $options['type'], $options['engine']), true);
file_put_contents($options['compiled'].'all.min.js', $jscode['code']);
} else {
foreach($js as $jsfile) {
$jscode = json_decode(api(file_get_contents($jsfile), $options['type'], $options['engine']), true);
file_put_contents($options['compiled'].str_replace('.js', '.min.js', $jsfile), $jscode['code']);
} 
} 
} 
function api($code, $type, $engine) {
$ch = curl_init('http://jscompress.sinaapp.com/api');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, 'get='.$type.'&code='.urlencode($code).'&type='.$engine);
$output = curl_exec($ch);
curl_close($ch);
return $output;
} 
JsTools();
?> 
作者最新文章