2010-12-02 19 views
1

私のアプリケーション内のコード行数をカウントする必要があります(PHPではコマンドラインではありません)。また、Web上のスニペットがあまり役に立たなかったので、私はここで尋ねることに決めました。 お返事ありがとう!PHP - アプリケーション内のコード行をカウントする方法

EDIT

実は、私が指定したフォルダ内のスキャンのための全体のスニペットとカウントラインが必要になります。私はCakePHPでこのメソッドを使用していますので、シームレスな統合に感謝します。

+2

あなたは、実際の行をしたいですかコード?コメントを含む/除外しますか? Inc/Excブランク? Inc/Excマルチライン文字列?ソースコードに関しては、 "行"という言葉には多くの異なる定義があります。 –

+0

コード、コメント、または空白を含むすべての行。 – linkyndy

答えて

5

ディレクトリ上でそれを行うには、私はイテレータを使用すると思います。

function countLines($path, $extensions = array('php')) { 
    $it = new RecursiveIteratorIterator(
     new RecursiveDirectoryIterator($path) 
    ); 
    $files = array(); 
    foreach ($it as $file) { 
     if ($file->isDir() || $file->isDot()) { 
      continue; 
     } 
     $parts = explode('.', $file->getFilename()); 
     $extension = end($parts); 
     if (in_array($extension, $extensions)) { 
      $files[$file->getPathname()] = count(file($file->getPathname())); 
     } 
    } 
    return $files; 
} 

これは、各ファイルをキーとして、行数を値として配列を返します。あなただけの合計をしたい場合はその後、ちょうどircmaxellのコードを使用してarray_sum(countLines($path)); ...

+0

あなたの答えをありがとう。私はRecursiveIteratorIteratorクラスが何をしているのか、それがCakePHPと簡単に統合できるものに置き換えられたのかどうかはわかりませんでした(私の質問で触れたように、私のアプリケーションには他の ' – linkyndy

+0

'foreign'クラスはPHP自体の一部です。 Cakeとの統合に関しては、その機能をコピーして貼り付けるよりもずっと簡単にはなりません。 – salathe

+0

@linkyndy: 'RecursiveIteratorIterator'と' RecursiveDirectoryIterator'は 'PHP 5.0.0'以来[コアPHPクラス](http://us.php.net/manual/en/spl.iterators.php)です。外国のクラスを含める必要はありません。上記のコードをコピーして実行すれば、それはどのフレームワークでも動作します(これは単なるPHPです)... – ircmaxell

4

あなたは、ファイルを読み込んでcountするfile機能を使用することができます。少し汚れ

$c = count(file('filename.php')); 
+0

+1試してみました! – systemovich

+0

私は質問が非常にはっきりしていないので編集しました:) – linkyndy

0

が、あなたはまた、wc -l *

+0

私は、コマンドライン入力ではなくPHPスニペットが必要だと言いました。ごめんなさい! – linkyndy

1

PHPクラスシステム/ EXEC /パススルーを使用することができますが素敵なクラスを持っていますあなたは

http://www.phpclasses.org/package/1091-PHP-Calculates-the-total-lines-of-code-in-a-directory.html

:ディレクトリ内のPHPファイルの行をカウントしますクラスの先頭でチェックしたいファイルタイプを指定することができます。

+0

提案していただきありがとうございますが、これをCakePHPに統合しているので、これを達成するために別のクラスをインポートしないとより適切になります:) – linkyndy

+0

いつでもコードを見て、それはかなり小さいです:-) – wajiw

2
 
$fp = "file.php"; 
$lines = file($fp); 
echo count($lines); 
+0

私はそれが非常にはっきりしていなかったので、質問を編集しました:) – linkyndy

3

を行う、私はそれは私のために素晴らしい作品、それから単純なクラスを作った今

<?php 
class Line_Counter 
{ 
    private $filepath; 
    private $files = array(); 

    public function __construct($filepath) 
    { 
     $this->filepath = $filepath; 
    } 

    public function countLines($extensions = array('php')) 
    { 
     $it = new RecursiveIteratorIterator(new RecursiveDirectoryIterator($this->filepath)); 
     foreach ($it as $file) 
     { 
      // if ($file->isDir() || $file->isDot()) 
      if ($file->isDir()) 
      { 
       continue; 
      } 
      $parts = explode('.', $file->getFilename()); 
      $extension = end($parts); 
      if (in_array($extension, $extensions)) 
      { 
       $files[$file->getPathname()] = count(file($file->getPathname())); 
      } 
     } 
     return $files; 
    } 

    public function showLines() 
    { 
     echo '<pre>'; 
     print_r($this->countLines()); 
     echo '</pre>'; 
    } 

    public function totalLines() 
    { 
     return array_sum($this->countLines()); 
    } 

} 

// Get all files with line count for each into an array 
$loc = new Line_Counter('E:\Server\htdocs\myframework'); 
$loc->showLines(); 

echo '<br><br> Total Lines of code: '; 
echo $loc->totalLines(); 

?> 
+0

ありがとうございました! – linkyndy

+0

合意、これを共有していただきありがとうございます! – Andrew

関連する問題