PHP的php_strip_whitespace函数描述,以及手册中写的代码压缩函数-可看看函数是怎么实现的
来源:互联网 发布:李炎恢 javascript视频 编辑:程序博客网 时间:2024/04/29 10:55
php_strip_whitespace函数:
php_strip_whitespace(string $filename)
1.返回删除注释和空格后 filename 的PHP源码(想要减少文件大小,我们可以使用此函数)2.这对实际代码数量和注释数量的对比很有用,一般文件中的注释就占了很大比重,尤其是一些框架,都有自己的版权,一大堆,可麻烦了
3.在命令行上,执行 "php -w",与调用此函数的效果类似
4.$filename - 要删除注释和空格的文件路径
5.返回值:成功时,返回过滤后的代码,失败返回 ""-空字符串
该函数使用还是想对简单的,我们这里主要是摘录下手册里记录的一个评论,压缩php源码(再次说明下:我这里仅记录,也未对源码进行分析,是为了用到的时候,可以记忆起来):
<?phpfunction 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;}?>
0 0
- PHP的php_strip_whitespace函数描述,以及手册中写的代码压缩函数-可看看函数是怎么实现的
- C++学习之旅——函数重载代码,必须得看看怎么写的
- PHP原来有php_strip_whitespace这个函数啊~
- c++中虚函数是怎么实现的
- sort函数的cmp函数怎么写?
- PHP压缩html的函数
- PHP is_writeable() 函数判断指定的文件是否可写
- 【Android注释技巧】Android函数上面的注释你是怎么写的?(Eclipse中)
- 【Android注释技巧】Android函数上面的注释你是怎么写的?(Eclipse中)
- 怎么用php写一个日志功能的函数
- 实例讲解PHP中实现代码重用的两个函数
- 用 PHP 开发健壮的代码: 编写可重用函数
- 简单实现C中sizeof函数是怎么实现的(面试的时候可能用到)
- 在.h文件中写声明,在.cpp文件中写变量和函数,以及实现类的函数
- 从PHP手册中提取的一个加密/解密函数
- PHP代码中函数前面的@是什么意思
- 看看str系列函数的实现 一
- PHP - Manual手册 - CLXX. Variable 变量函数 - serialize产生一个可存储的值的表示
- strtol() 字符串转长整型函数
- Java第6章-接口与多态-实验一(作战命令)
- 用友nc发布元数据时报错:v55版暂不支持在模型上简历跨组件的1对多关系
- 想把cm移植到自己的手机上,有没有大神可以教教 谢谢
- 51Nod Bash博弈套题
- PHP的php_strip_whitespace函数描述,以及手册中写的代码压缩函数-可看看函数是怎么实现的
- 2016-10-14
- cmake的一些基础知识
- C Primer Plus学习 五十二 八进制和十六进制
- 2016-10-15
- C++函数对象学习笔记
- android5.0 ActivityOptionsCompat
- 程序员是否真的适合你?
- JavaScript---map和set