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实现文件上传二法
Oct 09 PHP
通过对服务器端特性的配置加强php的安全
Oct 09 PHP
php 字符过滤类,用于过滤各类用户输入的数据
May 27 PHP
PHP 无限分类三种方式 非函数的递归调用!
Aug 26 PHP
php判断数组中是否存在指定键(key)的方法
Mar 17 PHP
php好代码风格的阶段性总结
Jun 25 PHP
PHP环形链表实现方法示例
Sep 15 PHP
PHP面向对象多态性实现方法简单示例
Sep 27 PHP
php图片裁剪函数
Oct 31 PHP
PHP设计模式之工厂模式(Factory Pattern)的讲解
Mar 21 PHP
PHP使用ajax的post方式下载excel文件简单示例
Aug 06 PHP
YII2框架中日志的配置与使用方法实例分析
Mar 18 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
2019年中国咖啡业现状与发展趋势
2021/03/04 咖啡文化
discuz程序的PHP加密函数原理分析
2011/08/05 PHP
php中使用cookie来保存用户登录信息的实现代码
2012/03/08 PHP
PHP中空字符串介绍0、null、empty和false之间的关系
2012/09/25 PHP
浅析PHP原理之变量分离/引用(Variables Separation)
2013/08/09 PHP
php根据数据id自动生成编号的实现方法
2016/10/16 PHP
function foo的原型与prototype属性解惑
2010/11/19 Javascript
JavaScript中valueOf函数与toString方法深入理解
2012/12/02 Javascript
JavaScript移除数组元素减少长度的方法
2013/09/05 Javascript
做好七件事帮你提升jQuery的性能
2014/02/06 Javascript
jQuery实现仿腾讯迷你首页选项卡效果代码
2015/09/17 Javascript
jQuery实现控制文字内容溢出用省略号(…)表示的方法
2016/02/26 Javascript
详解node服务器中打开html文件的两种方法
2017/09/18 Javascript
webpack+vue+express(hot)热启动调试简单配置方法
2018/09/19 Javascript
JS滚轮控制图片缩放大小和拖动的实例代码
2018/11/20 Javascript
使用Layui搭建后台管理界面的操作方法
2019/09/20 Javascript
vue表单数据交互提交演示教程
2019/11/13 Javascript
微信小程序云开发获取文件夹下所有文件(推荐)
2019/11/14 Javascript
webpack常用构建优化策略小结
2019/11/21 Javascript
vue项目中使用eslint+prettier规范与检查代码的方法
2020/01/16 Javascript
Vue+Vant 图片上传加显示的案例
2020/11/03 Javascript
JS实现公告上线滚动效果
2021/01/10 Javascript
Python yield 小结和实例
2014/04/25 Python
python中函数默认值使用注意点详解
2016/06/01 Python
Python3.0中普通方法、类方法和静态方法的比较
2019/05/03 Python
python自动识别文本编码格式代码
2019/12/26 Python
python 实现将Numpy数组保存为图像
2020/01/09 Python
CSS实现进度条和订单进度条的示例
2020/11/05 HTML / CSS
TOWER London官网:鞋子、靴子、运动鞋等
2019/07/14 全球购物
澳大利亚在线消费电子产品商店:TobyDeals
2020/01/05 全球购物
Java面试笔试题大全
2016/11/23 面试题
自我评价怎么写正确呢?
2013/12/02 职场文书
编辑找工作求职信分享
2014/01/03 职场文书
国际贸易毕业生求职信范文
2014/02/21 职场文书
大学军训感言1000字
2014/02/25 职场文书
Oracle 触发器trigger使用案例
2022/02/24 Oracle