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

Tags: PHP递归遍历文件夹

分享到: