zoukankan      html  css  js  c++  java
  • 自己用的PHP源码批量压缩

    清理注释、换行、空格。可能有bug。
    <?php
    header('Content-Type: text/html; charset=utf-8');
    
    $source = './demo/src';
    $destination = './demo/dst';
    
    $path = array($source);
    $file = array();
    
    while ($path){
        $path_cur = array_pop($path);
        @mkdir(str_replace($source, $destination, $path_cur));
        $file = array_merge($file, glob($path_cur.'/*.php'));
        $path = array_merge($path, glob($path_cur.'/*', GLOB_ONLYDIR));
    }
    
    foreach ($file as $src){
        $dst = str_replace($source, $destination, $src);
        $content = file_get_contents($src);
        $code = compress($content);
        file_put_contents ($dst, $code, LOCK_EX);
        echo sprintf("%s : %s -> %s\n", $dst, filesize($src), filesize($dst));
    }
    
    function compress($content){
            $code = array();
            $tokens = token_get_all($content);
            foreach ($tokens as $i => $token) {
                if (is_string($token)){
                    $code[$i] = $token;
                } else {
                    switch ($token[0]) {
                        case T_OPEN_TAG:
                        //case T_CLOSE_TAG:
                            $code[$i] = '<?php ';
                            break;
                        case T_COMMENT:
                        case T_DOC_COMMENT:
                        case T_WHITESPACE:
                            break;
                        case T_CASE:
                        case T_CLASS:
                        case T_CLONE:
                        case T_CONST:
                        case T_ECHO:
                        case T_FUNCTION:
                        case T_GLOBAL:
                        case T_IMPLEMENTS:
                        case T_INTERFACE:
                        case T_INCLUDE:
                        case T_INCLUDE_ONCE:
                        case T_INSTANCEOF:
                        case T_NEW:
                        case T_PRIVATE:
                        case T_PUBLIC:
                        case T_PROTECTED:
                        case T_REQUIRE:
                        case T_REQUIRE_ONCE:
                        case T_RETURN:
                        case T_STATIC:
                        case T_THROW:
                        case T_VAR:
                            $code[$i] = $token[1].' ';
                            break;
                        case T_EXTENDS:
                        case T_AS:
                        case T_LOGICAL_AND:
                        case T_LOGICAL_OR:
                        case T_LOGICAL_XOR:
                            $code[$i] = ' '.$token[1].' ';
                            break;
                        default:
                            $code[$i] = $token[1];
                    }
                }
            }
            return implode('', $code);
        }
    ?>
    
  • 相关阅读:
    [转]VMware-Transport(VMDB) error -44:Message.The VMware Authorization Service is not running解决方案
    [转]DNS服务器原理详解与Centos6.x下搭建DNS服务器
    [转]美国最大婚恋交友网站eHarmony的机器学习实践
    [转]Algolia的分布式搜索网络架构
    预测建模、监督机器学习和模式分类概览
    Java正则表达式
    Ajax入门
    JSON入门
    JSTL与EL表达式
    Servlet与JSP进阶
  • 原文地址:https://www.cnblogs.com/dishuostec/p/2002439.html
Copyright © 2011-2022 走看看