PHP递归遍历文件夹去除注释并压缩php源代码的方法示例


Posted in PHP onMay 23, 2018

本文实例讲述了PHP递归遍历文件夹去除注释并压缩代码的方法。分享给大家供大家参考,具体如下:

<?php
// ===================文件夹 递归 去除PHP注释并压缩=========================
header("content-type:text/html;charset=utf-8");
$dir = "D:\sound\admin--";  // 需要转换的文件路径。
$fdir = "D:\sound\admin";  // 最终要放到的位置。
$dir = str_replace('\\','/',$dir);
$fdir = str_replace('\\','/',$fdir);
if($dir == $fdir){
 echo "源文件与现在文件路径冲突,换一个路径吧";
 exit;
}
$arr = array($dir,$fdir);
ergodic($dir,$arr); // 递归的时候目录名一直是改变的。所以用一个数组另外存储两个路径,这样创建文件或者目录的时候就可以找到在那个目录下。
md($fdir);
function md($md){ // 创建目录
 if(!is_dir($md) && !empty($md) ){
    mkdir($md,0777);
 }
}
// 递归
function ergodic($dirname,$arr){
  if(is_dir($dirname)){
    $handle = opendir($dirname);
    $a = $arr[1].substr($dirname,strlen($arr[0]) );
    md($a);
    while($filename = readdir($handle)){  // 读取一个打开的文件名。
      if($filename != '.' && $filename != '..'){
        $dir = $dirname.'/'.$filename; // 拼接目录名
        if(is_dir($dir)){
          ergodic($dir,$arr);  // 递归
        }else{
          file_put_contents($a.'/'.$filename,replace_php_src($dir) );
          echo $dir."  去注释压缩完成!<br>";
        }
      }
    }
  }else{
    // 此处无用(因为来的都是目录),如果只转换一个文件,就可以这样使用。
   file_put_contents($arr[1].'/'.$dirname,replace_php_src($arr[0].'/'.$dirname) );
  }
}
// 去除注释并压缩,heredoc存在的时候去注释不压缩。
function replace_php_src($src){
  $contents = file_get_contents($src);
  $num = substr_count($contents,'<<<');  // heredoc 是否存在。
  $str = "";
  if($num > 0){  // heredoc 存在。只去除注释不压缩。
      $file = token_get_all($contents); // token_get_all() 将提供的源码按 PHP 标记进行分割.
      for ($i=0; $i < count($file); $i++) {
        if( is_string($file[$i]) ){
          $str .= $file[$i];
        }else{
           $name = token_name( $file[$i][0] ); // token_name() 获取提供的 PHP 解析器代号的符号名称.
            if($name == 'T_COMMENT' || $name == 'T_DOC_COMMENT' ){ // 去除注释
                continue;
            }else{
              $str .= $file[$i][1];
            }
        }
      }
  }else{
    $str = php_strip_whitespace($src); // 不存在 heredoc 。因为他会错误解析。
  }
  return $str;
}

希望本文所述对大家PHP程序设计有所帮助。

PHP 相关文章推荐
判断PHP数组是否为空的代码
Sep 08 PHP
PHPWind与Discuz截取字符函数substrs与cutstr性能比较
Dec 05 PHP
PHP逐行输出(ob_flush与flush的组合)
Feb 04 PHP
关于PHP实现异步操作的研究
Feb 03 PHP
php文本转图片自动换行的方法
Mar 13 PHP
PHP 5.5 创建和验证哈希最简单的方法详解
Nov 07 PHP
php使用curl简单抓取远程url的方法
Mar 13 PHP
PHP+shell实现多线程的方法
Jul 01 PHP
thinkphp如何获取客户端IP
Nov 03 PHP
vmware linux系统安装最新的php7图解
Apr 14 PHP
PHP中PCRE正则解析代码详解
Apr 26 PHP
php 命名空间(namespace)原理与用法实例小结
Nov 13 PHP
PHP实现将多个文件压缩成zip格式并下载到本地的方法示例
May 23 #PHP
PHP实现的mysql读写分离操作示例
May 22 #PHP
PHP基于pdo的数据库操作类【可支持mysql、sqlserver及oracle】
May 21 #PHP
PHP+MariaDB数据库操作基本技巧备忘总结
May 21 #PHP
PhpStorm本地断点调试的方法步骤
May 21 #PHP
PHP自动识别当前使用移动终端
May 21 #PHP
PHP连接MySQL数据库并以json格式输出
May 21 #PHP
You might like
PHP生成数组再传给js的方法
2014/08/07 PHP
PHP调用wsdl文件类型的接口代码分享
2014/11/19 PHP
关于PHP开发的9条建议
2015/07/27 PHP
js右键菜单效果代码
2007/07/21 Javascript
Javascript常用运算符(Operators)-javascript基础教程
2007/12/14 Javascript
Javascript的一种模块模式
2010/09/08 Javascript
基于js disabled=&quot;false&quot;不起作用的解决办法
2013/06/26 Javascript
Egret引擎开发指南之运行项目
2014/09/03 Javascript
用JavaScript实现用一个DIV来包装文本元素节点
2014/09/09 Javascript
深入理解javascript作用域和闭包
2014/09/23 Javascript
AngularJS教程之环境设置
2016/08/16 Javascript
在vue中,v-for的索引index在html中的使用方法
2018/03/06 Javascript
JS实现判断图片是否加载完成的方法分析
2018/07/31 Javascript
微信小程序如何实现五星评价功能
2019/10/15 Javascript
Python模块学习 filecmp 文件比较
2012/08/27 Python
python dict remove数组删除(del,pop)
2013/03/24 Python
使用python BeautifulSoup库抓取58手机维修信息
2013/11/21 Python
Python制作词云图代码实例
2019/09/09 Python
在ipython notebook中使用argparse方式
2020/04/20 Python
CSS3中Transition动画属性用法详解
2016/07/04 HTML / CSS
使用css实现android系统的loading加载动画
2019/07/25 HTML / CSS
【HTML5】Canvas绘制简单图片教程
2016/05/13 HTML / CSS
HTML5响应式(自适应)网页设计的实现
2017/11/17 HTML / CSS
加拿大便宜的隐形眼镜商店:Clearly
2016/09/15 全球购物
Vans(范斯)德国官网:美国南加州的原创极限运动潮牌
2017/05/02 全球购物
可口可乐唇膏:Lip Smackers
2019/08/27 全球购物
俄罗斯最大的在线珠宝大卖场:Nebo
2019/12/08 全球购物
Blue Nile蓝色尼罗河香港官网:世界最大在线钻石珠宝销售商
2020/05/07 全球购物
JAVA中运算符的分类及举例
2015/09/12 面试题
仓管员岗位责任制
2014/02/19 职场文书
法人代表委托书
2014/04/04 职场文书
详解TypeScript中的类型保护
2021/04/29 Javascript
python随机打印成绩排名表
2021/06/23 Python
Mybatis是这样防止sql注入的
2021/12/06 Java/Android
使用CSS设置滚动条样式
2022/01/18 HTML / CSS
python多次执行绘制条形图
2022/04/20 Python