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中$_SERVER的详细参数与说明
Jul 29 PHP
linux下 C语言对 php 扩展
Dec 14 PHP
php Try Catch异常测试
Mar 01 PHP
POSIX 风格和兼容 Perl 风格两种正则表达式主要函数的类比(preg_match, preg_replace, ereg, ereg_replace)
Oct 12 PHP
PHP显示今天、今月、上月、今年的起点/终点时间戳的代码
May 25 PHP
PHP在获取指定目录下的目录,在获取的目录下面再创建文件,多平台
Aug 03 PHP
php5.3中连接sqlserver2000的两种方法(com与ODBC)
Dec 29 PHP
解析smarty 截取字符串函数 truncate的用法介绍
Jun 20 PHP
WAMP环境中扩展oracle函数库(oci)
Jun 26 PHP
Smarty使用自定义资源的方法
Aug 08 PHP
PHP不使用内置函数实现字符串转整型的方法示例
Jul 03 PHP
PHP守护进程化在C和PHP环境下的实现
Nov 21 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
晶体管来复再生式二管收音机
2021/03/02 无线电
php addslashes及其他清除空格的方法是不安全的
2012/01/25 PHP
PHP模拟登陆163邮箱发邮件及获取通讯录列表的方法
2015/03/07 PHP
Yii2 queue的队列使用详解
2019/07/19 PHP
关于__defineGetter__ 和__defineSetter__的说明
2007/05/12 Javascript
Locate a File Using a File Open Dialog Box
2007/06/18 Javascript
小试JQuery的AutoComplete插件
2011/05/04 Javascript
js去空格技巧分别去字符串前后、左右空格
2013/10/21 Javascript
Extjs grid添加一个图片状态或者按钮的方法
2014/04/03 Javascript
js使用循环清空某个div中的input标签值
2014/09/29 Javascript
JavaScript面对国际化编程时的一些建议
2015/06/24 Javascript
JavaScript运动减速效果实例分析
2015/08/04 Javascript
JavaScript实现跑马灯抽奖活动实例代码解析与优化(二)
2016/02/16 Javascript
Bootstrap 表单验证formValidation 实现远程验证功能
2017/05/17 Javascript
Angular 4环境准备与Angular cli创建项目详解
2017/05/27 Javascript
JavaScript实现省市联动过程中bug的解决方法
2017/12/04 Javascript
剖析Angular Component的源码示例
2018/03/23 Javascript
详解Vue源码之数据的代理访问
2018/12/11 Javascript
解决JQuery的ajax函数执行失败alert函数弹框一闪而过问题
2019/04/10 jQuery
[11:42]2018DOTA2国际邀请赛寻真——OG卷土重来
2018/08/17 DOTA
Python实现动态添加类的属性或成员函数的解决方法
2014/07/16 Python
在Python 字典中一键对应多个值的实例
2019/02/03 Python
Python中的asyncio代码详解
2019/06/10 Python
Python网络编程之使用TCP方式传输文件操作示例
2019/11/01 Python
Python GUI库PyQt5图形和特效样式QSS介绍
2020/02/25 Python
html5 的a标签 Href 拨电话的写法
2013/11/04 HTML / CSS
耐克奥地利官网:Nike奥地利
2019/08/16 全球购物
自立自强的名人事例
2014/02/10 职场文书
总经理工作职责范文
2014/03/14 职场文书
2014教师年度思想工作总结
2014/11/10 职场文书
运动会加油稿50字
2015/07/21 职场文书
js实现上传图片到服务器
2021/04/11 Javascript
Node与Python 双向通信的实现代码
2021/07/16 Javascript
Python编写nmap扫描工具
2021/07/21 Python
关于HTML编码导致的乱码问题
2021/09/04 HTML / CSS
《帝国时代4》赛季预告 新增内容编译器可创造地图
2022/04/03 其他游戏