php源代码去注释压缩
考虑到其他方法比如正则之类无法更加准确的压缩源代码并且去注释,故采用了TP的内置函数,批量进行PHP源代码的去注释压缩;注意,一旦执行文件会将该文件及其子目录的php文件进行压缩;
checknotes.php源代码如下:
<?php
/**
* 威迈系统工具
* 威迈系统 - 2015.12.3
* Contact email:andy@81my.com.cn
*/
ini_set('memory_limit','1500M');
header('content-Type: text/html; charset=utf-8');
$auto = 1;/* 设置为1标示检测并去除,设置为0标示只进行检测,不去除 */
$basedir='.';
$loop = true;
echo '当前查找的目录为:'.$basedir.'当前的设置是:';
echo '(1)',$loop?'检查当前目录以及当前目录的子目录':'只针对当前目录进行检查';
echo '(2)',$auto?'去除文件的注释<br />':'不执行操作<br />';
checkdir($basedir,$loop);
function checkdir($basedir='',$loop=true){
$basedir=empty($basedir)?'.':$basedir;
if($dh=opendir($basedir)){
while (($file=readdir($dh))!==false){
$file_arr = explode('.', $file);
if($file!='.'&&$file!='..'){
if(!is_dir($basedir.'/'.$file)){
if(stristr($file, 'php')!==false){
echo '文件: '.$basedir.'/'.$file .checkNotes($basedir.'/'.$file).' <br>';
}
}else{
if(!$loop) continue;
$dirname=$basedir.'/'.$file;
checkdir($dirname);
}
}
}
closedir($dh);
}
}
function checkNotes($filename){
global $auto;
$contents = file_get_contents($filename);
if($auto==1){
$rest = strip_whitespace($contents);
rewrite($filename,$rest);
return (' <font color=red>找到注释并已自动去除</font>');
}else{
return (' <font color=red>未去除注释</font>');
}
}
function rewrite($filename,$data){
$filenum=fopen($filename,'w');
flock($filenum,LOCK_EX);
fwrite($filenum,$data);
fclose($filenum);
}
/**
* 去除代码中的空白和注释
* @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 .= "<<<THINK\n";
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;
}

