PHP的php_strip_whitespace函数描述,以及手册中写的代码压缩函数-可看看函数是怎么实现的

原创 2016年10月16日 11:07:00

php_strip_whitespace函数:

php_strip_whitespace(string $filename)

    1.返回删除注释和空格后 filename 的PHP源码(想要减少文件大小,我们可以使用此函数)
    2.这对实际代码数量和注释数量的对比很有用,一般文件中的注释就占了很大比重,尤其是一些框架,都有自己的版权,一大堆,可麻烦了
    3.在命令行上,执行 "php -w",与调用此函数的效果类似
    4.$filename - 要删除注释和空格的文件路径
    5.返回值:成功时,返回过滤后的代码,失败返回 ""-空字符串

该函数使用还是想对简单的,我们这里主要是摘录下手册里记录的一个评论,压缩php源码(再次说明下:我这里仅记录,也未对源码进行分析,是为了用到的时候,可以记忆起来):

<?php
function compress_php_src($src) {
    // Whitespaces left and right from this signs can be ignored
    static $IW = array(
        T_CONCAT_EQUAL,             // .=
        T_DOUBLE_ARROW,             // =>
        T_BOOLEAN_AND,              // &&
        T_BOOLEAN_OR,               // ||
        T_IS_EQUAL,                 // ==
        T_IS_NOT_EQUAL,             // != or <>
        T_IS_SMALLER_OR_EQUAL,      // <=
        T_IS_GREATER_OR_EQUAL,      // >=
        T_INC,                      // ++
        T_DEC,                      // --
        T_PLUS_EQUAL,               // +=
        T_MINUS_EQUAL,              // -=
        T_MUL_EQUAL,                // *=
        T_DIV_EQUAL,                // /=
        T_IS_IDENTICAL,             // ===
        T_IS_NOT_IDENTICAL,         // !==
        T_DOUBLE_COLON,             // ::
        T_PAAMAYIM_NEKUDOTAYIM,     // ::
        T_OBJECT_OPERATOR,          // ->
        T_DOLLAR_OPEN_CURLY_BRACES, // ${
        T_AND_EQUAL,                // &=
        T_MOD_EQUAL,                // %=
        T_XOR_EQUAL,                // ^=
        T_OR_EQUAL,                 // |=
        T_SL,                       // <<
        T_SR,                       // >>
        T_SL_EQUAL,                 // <<=
        T_SR_EQUAL,                 // >>=
    );
    if(is_file($src)) {
        if(!$src = file_get_contents($src)) {
            return false;
        }
    }
    $tokens = token_get_all($src);
    
    $new = "";
    $c = sizeof($tokens);
    $iw = false; // ignore whitespace
    $ih = false; // in HEREDOC
    $ls = "";    // last sign
    $ot = null;  // open tag
    for($i = 0; $i < $c; $i++) {
        $token = $tokens[$i];
        if(is_array($token)) {
            list($tn, $ts) = $token; // tokens: number, string, line
            $tname = token_name($tn);
            if($tn == T_INLINE_HTML) {
                $new .= $ts;
                $iw = false;
            } else {
                if($tn == T_OPEN_TAG) {
                    if(strpos($ts, " ") || strpos($ts, "\n") || strpos($ts, "\t") || strpos($ts, "\r")) {
                        $ts = rtrim($ts);
                    }
                    $ts .= " ";
                    $new .= $ts;
                    $ot = T_OPEN_TAG;
                    $iw = true;
                } elseif($tn == T_OPEN_TAG_WITH_ECHO) {
                    $new .= $ts;
                    $ot = T_OPEN_TAG_WITH_ECHO;
                    $iw = true;
                } elseif($tn == T_CLOSE_TAG) {
                    if($ot == T_OPEN_TAG_WITH_ECHO) {
                        $new = rtrim($new, "; ");
                    } else {
                        $ts = " ".$ts;
                    }
                    $new .= $ts;
                    $ot = null;
                    $iw = false;
                } elseif(in_array($tn, $IW)) {
                    $new .= $ts;
                    $iw = true;
                } elseif($tn == T_CONSTANT_ENCAPSED_STRING
                       || $tn == T_ENCAPSED_AND_WHITESPACE)
                {
                    if($ts[0] == '"') {
                        $ts = addcslashes($ts, "\n\t\r");
                    }
                    $new .= $ts;
                    $iw = true;
                } elseif($tn == T_WHITESPACE) {
                    $nt = @$tokens[$i+1];
                    if(!$iw && (!is_string($nt) || $nt == '$') && !in_array($nt[0], $IW)) {
                        $new .= " ";
                    }
                    $iw = false;
                } elseif($tn == T_START_HEREDOC) {
                    $new .= "<<<S\n";
                    $iw = false;
                    $ih = true; // in HEREDOC
                } elseif($tn == T_END_HEREDOC) {
                    $new .= "S;";
                    $iw = true;
                    $ih = false; // in HEREDOC
                    for($j = $i+1; $j < $c; $j++) {
                        if(is_string($tokens[$j]) && $tokens[$j] == ";") {
                            $i = $j;
                            break;
                        } else if($tokens[$j][0] == T_CLOSE_TAG) {
                            break;
                        }
                    }
                } elseif($tn == T_COMMENT || $tn == T_DOC_COMMENT) {
                    $iw = true;
                } else {
                    if(!$ih) {
                        $ts = strtolower($ts);
                    }
                    $new .= $ts;
                    $iw = false;
                }
            }
            $ls = "";
        } else {
            if(($token != ";" && $token != ":") || $ls != $token) {
                $new .= $token;
                $ls = $token;
            }
            $iw = true;
        }
    }
    return $new;
}
?>

PHP原来有php_strip_whitespace这个函数啊~

以前还在想算法实现输出自身,原来PHP5带有这个函数~
  • linvo
  • linvo
  • 2009-03-06 10:53:00
  • 1235

PHP的php_strip_whitespace函数描述,以及手册中写的代码压缩函数-可看看函数是怎么实现的

php_strip_whitespace函数: php_strip_whitespace(string $filename)     1.返回删除注释和空格后 filename 的PHP源码(想要...
  • beyond__devil
  • beyond__devil
  • 2016-10-16 11:07:00
  • 436

PHP压缩图片函数

/** 图片压缩函数 * @param $orgin_file 原始图片文件 * @param $maxwidth 最大宽度 * @param $maxheight 最大高度 * @param...
  • kissxia
  • kissxia
  • 2016-07-04 17:18:09
  • 632

PHP 函数的完整参考手册

所有 PHP 函数的完整参考手册: Array 函数 Calendar 函数 cURL 函数 Date 函数 Directory 函数 Error 函数 Filesystem 函数 Filter ...
  • Fancie_Wong
  • Fancie_Wong
  • 2016-11-02 13:50:29
  • 2287

去除代码中的空白和注释 并且ThinkPHP框架内置了该方法。

PHP内置了一个php_strip_whitespace方法用于读取php文件并去除代码中的空白和注释,但不支持直接读取内容去除空白和注释,下面的方法则可以支持读取字符串内容,并且ThinkPHP框架...
  • a9254778
  • a9254778
  • 2012-10-22 09:44:24
  • 2384

php-------代码加密的几种方法

代码加密,也是保护网站安全的一种方法,以下我们来介绍一下如何通过PHP的自定义函数来加密我们的PHP代码。 方法一: ...
  • DickyQie
  • DickyQie
  • 2018-01-26 09:24:37
  • 462

php自己写字符串翻转函数

strrev($str) { $len=strlen($str); $newstr = ''; for($i=$len;$i>=0;$i--) { $newstr .= $str{$i}...
  • lifushan123
  • lifushan123
  • 2015-04-04 23:49:59
  • 2047

怎么用php写一个日志功能的函数

我们要写一个写日志的函数,首先需要了解需求,我们一般怎么用日志函数呢?例如,程序执行到某一步,我希望把这个变量(地址)$user_address的值打印到日志,我们希望日志里是这么写的:xx-xx-x...
  • gongstrong123
  • gongstrong123
  • 2016-03-08 14:01:32
  • 2589

PHP给源代码加密的几种方法

虽说分享是传统的美德,但我们有时候辛辛苦苦写一些程序只是为了卖点小钱,挣点辛苦费,也防止有些没有道德的人倒卖,所以我们不得不对我们的程序进行加密,以下我们来介绍一下如何通过PHP的自定义函数来加密我们...
  • yongsen_odaboy
  • yongsen_odaboy
  • 2018-02-05 16:31:36
  • 371

PHP中的10个实用函数

1.php_check_syntax 这个函数可以用来检查特定文件中的PHP语法是否正确。 使用方法: php $error_message = ""; $filename = "./p...
  • baidu_35738377
  • baidu_35738377
  • 2016-11-10 09:56:53
  • 433
收藏助手
不良信息举报
您举报文章:PHP的php_strip_whitespace函数描述,以及手册中写的代码压缩函数-可看看函数是怎么实现的
举报原因:
原因补充:

(最多只允许输入30个字)