03
Dec

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;
}


About Me

Nothing is impossible!

Friends
倩倩的网站儿子的网站丽丽
CATEGORIES
Tags
ChatGPT四舍五入GOBeatles想像冰雪奇缘北京编程SSL证书认知障碍Docker春天行政区域名列表域名体系nginxopen_basedir思维指令编程语言程序URL网站上线域名FTP云服务器搜索引擎JSCSS网页超链接聚合内容列表元素网页构成网站的构成网站的分类网站单标签HTML第一个网页简单网页博域科技2018香山春游AJAX字体
Copyright©2022 王阳 版权所有  京ICP备14005672号-6