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+mysql来做一个功能强大的在线计算器
Oct 12 PHP
php 面试碰到过的问题 在此做下记录
Jun 09 PHP
比file_get_contents稳定的curl_get_contents分享
Jan 11 PHP
基于Zookeeper的使用详解
May 02 PHP
PHP 面向对象程序设计(oop)学习笔记 (五) - PHP 命名空间
Jun 12 PHP
php获取当月最后一天函数分享
Feb 02 PHP
ThinkPHP3.2.1图片验证码实现方法
Aug 19 PHP
php+jQuery递归调用POST循环请求示例
Oct 14 PHP
ThinkPHP整合datatables实现服务端分页的示例代码
Feb 10 PHP
windows环境下使用Composer安装ThinkPHP5
May 18 PHP
PHP读取Excel内的图片(phpspreadsheet和PHPExcel扩展库)
Nov 19 PHP
解决PHP Opcache 缓存刷新、代码重载出现无法更新代码的问题
Aug 24 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实现框架(二)
2006/10/09 PHP
Zend studio for eclipse中使php可以调用mysql相关函数的设置方法
2008/10/13 PHP
php 获得汉字拼音首字母的函数
2009/08/01 PHP
php 字符串替换的方法
2012/01/10 PHP
深入PHP5中的魔术方法详解
2013/06/17 PHP
PHP模板引擎smarty详细介绍
2015/05/26 PHP
php实现xml与json之间的相互转换功能实例
2016/07/07 PHP
php加速缓存器opcache,apc,xcache,eAccelerator原理与配置方法实例分析
2020/03/02 PHP
让getElementsByName适应IE和firefox的方法
2007/09/24 Javascript
javascript下判断一个对象是否具有指定名称的属性的的代码
2010/01/11 Javascript
javascript:void(0)使用探讨
2013/08/27 Javascript
json的定义、标准格式及json字符串检验
2014/05/11 Javascript
从零学jquery之如何使用回调函数
2014/05/16 Javascript
JQuery 实现在同一页面锚点链接之间的平滑滚动
2014/10/29 Javascript
浅谈JS闭包中的循环绑定处理程序
2014/11/09 Javascript
js实现黑色简易的滑动门网页tab选项卡效果
2015/08/31 Javascript
微信小程序 教程之事件
2016/10/18 Javascript
vue-cli创建的项目,配置多页面的实现方法
2018/03/15 Javascript
详解vue-cli 本地开发mock数据使用方法
2018/05/29 Javascript
微信小程序实现自定义picker选择器弹窗内容
2020/05/26 Javascript
JS实现方形抽奖效果
2018/08/27 Javascript
mpvue 单文件页面配置详解
2018/12/02 Javascript
微信小程序使用map组件实现解析经纬度功能示例
2019/01/22 Javascript
在vue项目中封装echarts的步骤
2020/12/25 Vue.js
详解在Python程序中使用Cookie的教程
2015/04/30 Python
对python产生随机的二维数组实例详解
2018/12/13 Python
Python imutils 填充图片周边为黑色的实现
2020/01/19 Python
浅谈Tensorflow 动态双向RNN的输出问题
2020/01/20 Python
Python Scrapy框架:通用爬虫之CrawlSpider用法简单示例
2020/04/11 Python
怎样创建、运行java程序
2014/08/01 面试题
师范生求职自荐信
2014/06/14 职场文书
高职教师先进事迹材料
2014/08/24 职场文书
教师党员批评与自我批评
2014/10/15 职场文书
工作自我评价范文
2015/03/05 职场文书
《童年的发现》教学反思
2016/02/18 职场文书
读《推着妈妈去旅行》有感1500字
2019/10/15 职场文书