更新:可以直接使用PHP的内置函数 php_strip_whitespace(string $filename) 来去掉PHP源代码中的空白和注释,不用这么费劲,文档地址:
如何去除PHP代码中的空白和注释?且看以下代码。
主要函数(摘自ThinkPHP):
-
/**
-
* 去除代码中的空白和注释
-
* @param string $content 代码内容
-
* @return string
-
*/
-
function strip_whitespace($content) {
-
$stripStr = '';
-
//分析php源码
-
$tokens = token_get_all($content);
-
$last_space = false;
-
for ($i = 0, $j = count($tokens); $i < $j; $i++) {
-
if (is_string($tokens[$i])) {
-
$last_space = false;
-
$stripStr .= $tokens[$i];
-
} else {
-
switch ($tokens[$i][0]) {
-
//过滤各种PHP注释
-
case T_COMMENT:
-
case T_DOC_COMMENT:
-
break;
-
//过滤空格
-
case T_WHITESPACE:
-
if (!$last_space) {
-
$stripStr .= ' ';
-
$last_space = true;
-
}
-
break;
-
case T_START_HEREDOC:
-
$stripStr .= "<<;
-
break;
-
case T_END_HEREDOC:
-
$stripStr .= "THINK;\n";
-
for($k = $i+1; $k < $j; $k++) {
-
if(is_string($tokens[$k]) && $tokens[$k] == ';') {
-
$i = $k;
-
break;
-
} else if($tokens[$k][0] == T_CLOSE_TAG) {
-
break;
-
}
-
}
-
break;
-
default:
-
$last_space = false;
-
$stripStr .= $tokens[$i][1];
-
}
-
}
-
}
-
return $stripStr;
-
}
用于压缩测试的代码文件(fuckcpu.php):
-
<?php
-
function doCal(){
-
$t=8292*23432*234343*29293829*234343234;
-
$tt=$t*2343*2343/2343*34324;
-
}
-
while(true){
-
doCal();
-
}
-
?>
测试脚本(test.php):
-
<?php
-
require('common.php');
-
$phpFile='fuckcpu.php';
-
echo strip_whitespace(file_get_contents($phpFile));
-
?>
fuckcpu.php 被压缩之后的输出:
-
<?php
-
function doCal(){ $t=8292*23432*234343*29293829*234343234; $tt=$t*2343*2343/2343*34324; } while(true){ doCal(); } ?>
说明:
strip_whitespace($content) 函数中主要用到了PHP的自带函数 token_get_all($source) ,这个函数的作用就是用Zend引擎的词典扫描器把PHP源代码解析成一个个PHP语言token。
token_get_all() 函数的返回值是一个token标识符数组,这个数组中的元素要么是单个字符(如:),要么是一个包含三个元素的数组,第一个元素保存了这个token的代号,第二个元素保存了这个token的字符串内容,第三个元素保存了这个token所在的行号。参考:
阅读(3113) | 评论(0) | 转发(0) |