drfu29983 2011-02-25 00:44
浏览 5
已采纳

计算给定dir的.php文件中的所有代码行

How to make a little function that given a directory it returns the number of lines (counts ) of .php files between <?php and ?>?

Usage:

echo countsLineOfCode('D:/dir/code/');    
// returns 323;
  • 写回答

4条回答 默认 最新

  • dongme8388 2011-02-25 00:49
    关注
    function countLinesOfCode($path) {
       $lines = 0;
       $items = glob(rtrim($path, '/') . '/*');
    
       foreach($items as $item) {
    
           if (is_file($item) AND pathinfo($item, PATHINFO_EXTENSION) == 'php') {
               $fileContents = file_get_contents($item);
               preg_match_all('/<\?(?:php)?(.*?)($|\?>)/s', $fileContents, $matches);
    
               foreach($matches[1] as $match) {
                   $lines += substr_count($match, PHP_EOL);
               }
    
           } else if (is_dir($item)) {
               $lines += countLinesOfCode($item);
               continue;
           }       
    
       }
    
       return $lines;
    }
    
    var_dump(countLinesOfCode(dirname(__FILE__))); // int(31) (works for me)
    

    Keep in mine this is counting newlines, not end of line character ;. For example, the line below will be considered one line...

    var_dump($files); echo 'something'; exit;
    

    It also counts lines without any PHP code, e.g. the below code will be 4 lines...

    <?php
    
    
    
    $a = 3;
    

    It also doesn't count the <?php or closing (if present).

    Let me know if it (a) shouldn't match empty lines, (b) should match semi colons instead (will need to ensure they are not appearing within a string) and/or (c) it should match the opening and closing tag (will be easy as changing $matches[1] in the foreach to $matches[0]).

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(3条)

报告相同问题?

悬赏问题

  • ¥15 opencv图像处理,需要四个处理结果图
  • ¥15 无线移动边缘计算系统中的系统模型
  • ¥15 深度学习中的画图问题
  • ¥15 java报错:使用mybatis plus查询一个只返回一条数据的sql,却报错返回了1000多条
  • ¥15 Python报错怎么解决
  • ¥15 simulink如何调用DLL文件
  • ¥15 关于用pyqt6的项目开发该怎么把前段后端和业务层分离
  • ¥30 线性代数的问题,我真的忘了线代的知识了
  • ¥15 有谁能够把华为matebook e 高通骁龙850刷成安卓系统,或者安装安卓系统
  • ¥188 需要修改一个工具,懂得汇编的人来。