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 相关文章推荐
APMServ使用说明
Oct 23 PHP
Win2003服务器安全加固设置--进一步提高服务器安全性
May 23 PHP
php mysql数据库操作类
Jun 04 PHP
php stream_get_meta_data返回值
Sep 29 PHP
ci检测是ajax还是页面post提交数据的方法
Nov 10 PHP
php实现字符串翻转的方法
Mar 27 PHP
php实现阳历阴历互转的方法
Oct 28 PHP
php提交过来的数据生成为txt文件
Apr 28 PHP
php入门教程之Zend Studio设置与开发实例
Sep 09 PHP
PHP基于堆栈实现的高级计算器功能示例
Sep 15 PHP
Ajax+PHP实现的模拟进度条功能示例
Feb 11 PHP
php-7.3.6 编译安装过程
Feb 11 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中serialize序列化与json性能测试的示例分析
2013/04/27 PHP
PHP删除HTMl标签的实现代码
2013/06/30 PHP
浅谈PHP检查数组中是否存在某个值 in_array 函数
2016/06/13 PHP
PHP实现验证码校验功能
2017/11/16 PHP
javascript 函数调用的对象和方法
2010/07/01 Javascript
Jquery下判断Id是否存在的代码
2011/01/06 Javascript
淘宝搜索框效果实现分析
2011/03/05 Javascript
jQuery中 prop() attr()使用详解
2015/05/19 Javascript
深究AngularJS——ng-checked(回写:带真实案例代码)
2017/06/13 Javascript
彻底搞懂JavaScript中的apply和call方法(必看)
2017/09/18 Javascript
微信禁止下拉查看URL的处理方法
2017/09/28 Javascript
Angular 5.x 学习笔记之Router(路由)应用
2018/04/08 Javascript
angularJS1 url中携带参数的获取方法
2018/10/09 Javascript
react 兄弟组件如何调用对方的方法示例
2018/10/23 Javascript
详解JavaScript中的强制类型转换
2019/04/15 Javascript
微信小程序bindtap事件与冒泡阻止详解
2019/08/08 Javascript
小米5s微信跳一跳小程序python源码
2018/01/08 Python
Pycharm 设置自定义背景颜色的图文教程
2018/05/23 Python
pip命令无法使用的解决方法
2018/06/12 Python
解决python 3 urllib 没有 urlencode 属性的问题
2019/08/22 Python
关于Python3 类方法、静态方法新解
2019/08/30 Python
Python 生成一个从0到n个数字的列表4种方法小结
2019/11/28 Python
python 实现屏幕录制示例
2019/12/23 Python
Python面向对象编程基础实例分析
2020/01/17 Python
H5 canvas中width、height和style的宽高区别详解
2018/11/02 HTML / CSS
HTML5的结构和语义(2):结构
2008/10/17 HTML / CSS
关于h5中的fetch方法解读(小结)
2017/11/15 HTML / CSS
Nike爱尔兰官方网站:Nike.com (IE)
2018/03/12 全球购物
法国发饰品牌:Alexandre De Paris
2018/12/04 全球购物
存储过程和函数的区别
2013/05/28 面试题
元旦晚会邀请函
2014/01/27 职场文书
小学德育工作经验交流材料
2014/05/22 职场文书
维稳工作承诺书
2015/01/20 职场文书
2016计算机专业毕业生自荐信
2016/01/28 职场文书
送给教师们,到底该如何写好教学反思?
2019/07/02 职场文书
Win11安装受阻怎么办? Windows11安装问题与解决方案汇总
2021/11/21 数码科技