国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 語言 > PHP > 正文

PHP統計目錄下的文件總數及代碼行數

2024-09-04 11:44:04
字體:
來源:轉載
供稿:網友
  1. <?php 
  2. /** 
  3.  * @author xiaoxiao <x_824@sina.com> 2011-1-12 
  4.  * @link http://xiaoyaoxia.cnblogs.com/ 
  5.  * @license 
  6.  * 統計目錄下的文件行數及總文件數··去除注釋 
  7.  */ 
  8.  
  9. $obj = new caculatefiles(); 
  10. //如果設置為false,這不會顯示每個文件的信息,否則顯示 
  11. $obj->setshowflag(false); 
  12. //會跳過所有all開頭的文件 
  13. $obj->setfileskip(array('all'));  
  14. $obj->run("d:phpappphp_tests"); 
  15.  
  16. //所有文件,(默認格式為.php) 
  17. $obj->setfileskip(array()); 
  18. $obj->run("d:phpappphp"); 
  19.  
  20. $obj->setshowflag(true); 
  21. //跳過所有i和a開頭的文件,(比如接口和抽象類開頭) 
  22. $obj->setfileskip(array('i''a')); 
  23. $obj->run("d:phpappphp"); 
  24.  
  25.  
  26. /** 
  27.  * 執行目錄中文件的統計(包括文件數及總行數 
  28.  *  
  29.  * 1、跳過文件的時候: 
  30.  *    匹配的規則只是從文件名上著手,匹配的規則也僅限在開頭。 
  31.  * 2、跳過文件中的注釋行: 
  32.  *    匹配的規則只是從注釋段落的頭部匹配,如果出現// 及 *及 #及/*開頭的行及空行會被跳過。所以類似/*這種多汗注釋,每行的開頭都必須加上*號,否則無法匹配到這種的注釋。 
  33.  * 3、目錄過濾: 
  34.  *    匹配的規則是從目錄名的全名匹配 
  35.  */ 
  36. class caculatefiles { 
  37.  /** 
  38.   * 統計的后綴 
  39.   */ 
  40.  private $ext = ".php"
  41.  /** 
  42.   * 是否顯示每個文件的統計數,開源代碼Vevb.com 
  43.   */ 
  44.  private $showeveryfile = true; 
  45.  /** 
  46.   * 文件的的跳過規則 
  47.   */ 
  48.  private $fileskip = array(); 
  49.  /** 
  50.   * 統計的跳過行規則 
  51.   */ 
  52.  private $lineskip = array("*""/*""//""#"); 
  53.  /** 
  54.   * 統計跳過的目錄規則 
  55.   */ 
  56.  private $dirskip = array("."".."'.svn'); 
  57.    
  58.  public function __construct($ext = ''$dir = ''$showeveryfile = true, $dirskip = array(), $lineskip = array(), $fileskip = array()) { 
  59.   $this->setext($ext); 
  60.   $this->setdirskip($dirskip); 
  61.   $this->setfileskip($fileskip); 
  62.   $this->setlineskip($lineskip); 
  63.   $this->setshowflag($showeveryfile); 
  64.   $this->run($dir); 
  65.  } 
  66.    
  67.  public function setext($ext) { 
  68.   trim($ext) && $this->ext = strtolower(trim($ext)); 
  69.  } 
  70.  public function setshowflag($flag = true) { 
  71.   $this->showeveryfile = $flag
  72.  } 
  73.  public function setdirskip($dirskip) { 
  74.   $dirskip && is_array($dirskip) && $this->dirskip = $dirskip
  75.  } 
  76.  public function setfileskip($fileskip) { 
  77.   $this->fileskip = $fileskip
  78.  } 
  79.  public function setlineskip($lineskip) { 
  80.   $lineskip && is_array($lineskip) && $this->lineskip = array_merge($this->lineskip, $lineskip); 
  81.  } 
  82.  /** 
  83.   * 執行統計 
  84.   * @param string $dir 統計的目錄 
  85.   */ 
  86.  public function run($dir = '') { 
  87.   if ($dir == ''return
  88.   if (!is_dir($dir)) exit('path error!'); 
  89.   $this->dump($dir$this->readdir($dir)); 
  90.  } 
  91.      
  92.  /** 
  93.   * 顯示統計結果 
  94.   * @param string $dir 目錄 
  95.   * @param array $result 統計結果(包含總行數,有效函數,總文件數 
  96.   */ 
  97.  private function dump($dir$result) { 
  98.   $totalline = $result['totalline']; 
  99.   $linenum = $result['linenum']; 
  100.   $filenum = $result['filenum']; 
  101.   echo "*************************************************************rn<br/>"
  102.   echo $dir . ":rn<br/>"
  103.   echo "totalline: " . $totalline . "rn<br/>"
  104.   echo "totalline with no comment and empty: " . $linenum . "rn<br/>"
  105.   echo 'totalfiles:' . $filenum . "rn<br/>"
  106.  } 
  107.  
  108.  /** 
  109.   * 讀取目錄 
  110.   * @param string $dir 目錄 
  111.   */ 
  112.  private function readdir($dir) { 
  113.   $num = array('totalline' => 0, 'linenum' => 0, 'filenum' => 0); 
  114.   if ($dh = opendir($dir)) { 
  115.    while (($file = readdir($dh)) !== false) { 
  116.     if ($this->skipdir($file)) continue
  117.     if (is_dir($dir . '/' . $file)) { 
  118.      $result = $this->readdir($dir . '/' . $file); 
  119.      $num['totalline'] += $result['totalline']; 
  120.      $num['linenum'] += $result['linenum']; 
  121.      $num['filenum'] += $result['filenum']; 
  122.     } else { 
  123.      if ($this->skipfile($file)) continue
  124.      list($num1$num2) = $this->readfiles($dir . '/' . $file); 
  125.      $num['totalline'] += $num1
  126.      $num['linenum'] += $num2
  127.      $num['filenum']++; 
  128.     } 
  129.    } 
  130.    closedir($dh); 
  131.   } else { 
  132.    echo 'open dir <' . $dir . '> error!' . "r"
  133.   } 
  134.   return $num
  135.  } 
  136.  
  137.  /** 
  138.   * 讀取文件 
  139.   * @param string $file 文件 
  140.   */ 
  141.  private function readfiles($file) { 
  142.   $str = file($file); 
  143.   $linenum = 0; 
  144.   foreach ($str as $value) { 
  145.    if ($this->skipline(trim($value))) continue
  146.    $linenum++; 
  147.   } 
  148.   $totalnum = count(file($file)); 
  149.   if (!$this->showeveryfile) return array($totalnum$linenum); 
  150.   echo $file . "rn"
  151.   echo 'totalline in the file:' . $totalnum . "rn"
  152.   echo 'totalline with no comment and empty in the file:' . $linenum . "rn"
  153.   return array($totalnum$linenum); 
  154.  } 
  155.     
  156.     /** 
  157.   * 執行跳過的目錄規則 
  158.   * @param string $dir 目錄名 
  159.   */ 
  160.  private function skipdir($dir) { 
  161.   if (in_array($dir$this->dirskip)) return true; 
  162.   return false; 
  163.  } 
  164.      
  165.  /** 
  166.   * 執行跳過的文件規則 
  167.   * @param string $file 文件名 
  168.   */ 
  169.  private function skipfile($file) { 
  170.   if (strtolower(strrchr($file'.')) != $this->ext) return true; 
  171.   if (!$this->fileskip) return false; 
  172.   foreach ($this->fileskip as $skip) { 
  173.    if (strpos($file$skip) === 0) return true; 
  174.   } 
  175.   return false; 
  176.  } 
  177.      
  178.  /** 
  179.   * 執行文件中行的跳過規則 
  180.   * @param string $string 行內容 
  181.   */ 
  182.  private function skipline($string) { 
  183.   if ($string == ''return true; 
  184.   foreach ($this->lineskip as $tag) { 
  185.    if (strpos($string$tag) === 0) return true; 
  186.   } 
  187.   return false; 
  188.  } 
  189. ?> 

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 独山县| 深水埗区| 云安县| 和政县| 和硕县| 拉孜县| 香河县| 三门峡市| 崇仁县| 梁平县| 确山县| 洛川县| 尼玛县| 陕西省| 阳信县| 西青区| 青河县| 乌什县| 大埔区| 巴彦淖尔市| 呼玛县| 海淀区| 泸州市| 麻栗坡县| 株洲市| 连南| 南郑县| 新昌县| 甘洛县| 加查县| 揭阳市| 高雄县| 揭东县| 通山县| 土默特右旗| 玉门市| 禹城市| 枝江市| 商水县| 漳平市| 潼南县|