当前位置:首页 > PHP教程 > php高级应用 > 列表

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

发布:smiling 来源: PHP粉丝网  添加日期:2021-09-17 19:11:14 浏览: 评论:0 

这篇文章主要介绍了PHP递归遍历文件夹去除注释并压缩php源代码的方法,涉及php文件与目录的遍历、读取、判断及使用php_strip_whitespace函数删除注释的相关操作技巧,需要的朋友可以参考下。

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

  1. <?php 
  2. // ===================文件夹 递归 去除PHP注释并压缩========================= 
  3. header("content-type:text/html;charset=utf-8"); 
  4. $dir = "D:\sound\admin--";  // 需要转换的文件路径。 
  5. $fdir = "D:\sound\admin";  // 最终要放到的位置。 
  6. $dir = str_replace('\\','/',$dir); 
  7. $fdir = str_replace('\\','/',$fdir); 
  8. if($dir == $fdir){ 
  9.  echo "源文件与现在文件路径冲突,换一个路径吧"
  10.  exit
  11. $arr = array($dir,$fdir); 
  12. ergodic($dir,$arr); // 递归的时候目录名一直是改变的。所以用一个数组另外存储两个路径,这样创建文件或者目录的时候就可以找到在那个目录下。 
  13. md($fdir); 
  14. function md($md){ // 创建目录 
  15.  if(!is_dir($md) && !emptyempty($md) ){ 
  16.     mkdir($md,0777); 
  17.  } 
  18. // 递归 
  19. function ergodic($dirname,$arr){ 
  20.   if(is_dir($dirname)){ 
  21.     $handle = opendir($dirname); 
  22.     $a = $arr[1].substr($dirname,strlen($arr[0]) ); 
  23.     md($a); 
  24.     while($filename = readdir($handle)){  // 读取一个打开的文件名。 
  25.       if($filename != '.' && $filename != '..'){ 
  26.         $dir = $dirname.'/'.$filename// 拼接目录名 
  27.         if(is_dir($dir)){ 
  28.           ergodic($dir,$arr);  // 递归 
  29.         }else
  30.           file_put_contents($a.'/'.$filename,replace_php_src($dir) ); 
  31.           echo $dir."  去注释压缩完成!<br>"
  32.         } 
  33.       } 
  34.     } 
  35.   }else
  36.     // 此处无用(因为来的都是目录),如果只转换一个文件,就可以这样使用。 
  37.    file_put_contents($arr[1].'/'.$dirname,replace_php_src($arr[0].'/'.$dirname) ); 
  38.   } 
  39. // 去除注释并压缩,heredoc存在的时候去注释不压缩。 
  40. function replace_php_src($src){ 
  41.   $contents = file_get_contents($src); 
  42.   $num = substr_count($contents,'<<<');  // heredoc 是否存在。 
  43.   $str = ""
  44.   if($num > 0){  // heredoc 存在。只去除注释不压缩。 
  45.       $file = token_get_all($contents); // token_get_all() 将提供的源码按 PHP 标记进行分割. 
  46.       for ($i=0; $i < count($file); $i++) { 
  47.         ifis_string($file[$i]) ){ 
  48.           $str .= $file[$i]; 
  49.         }else
  50.            $name = token_name( $file[$i][0] ); // token_name() 获取提供的 PHP 解析器代号的符号名称. 
  51.             if($name == 'T_COMMENT' || $name == 'T_DOC_COMMENT' ){ // 去除注释 
  52.                 continue
  53.             }else
  54.               $str .= $file[$i][1]; 
  55.             } 
  56.         } 
  57.       } 
  58.   }else
  59.     $str = php_strip_whitespace($src); // 不存在 heredoc 。因为他会错误解析。 
  60.   } 
  61.   return $str
  62. }

Tags: PHP递归遍历文件夹

分享到: