Мне нужно подсчитать количество строк кода в моем приложении (в PHP, а не в командной строке), и поскольку фрагменты в Интернете не помогли слишком много, я решил спросить здесь. Спасибо за любой ответ!
РЕДАКТИРОВАТЬ
На самом деле, мне понадобится весь фрагмент для сканирования и подсчета строк в заданной папке. Я использую этот метод в CakePHP, поэтому буду благодарен за полную интеграцию.
Чтобы сделать это над каталогом, я бы использовал итератор.
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; }
Это вернет массив с каждым файлом в качестве ключа и количеством строк в качестве значения. Затем, если вы хотите только общее количество, просто выполните array_sum(countLines($path));
…
Вы можете использовать функцию file
для чтения файла, а затем count
:
$c = count(file('filename.php'));
Используя код ircmaxell, я сделал из него простой класс, он отлично работает для меня сейчас
<?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(); ?>
$ fp = "file.php"; $ lines = file ($ fp); количество эхо ($ линий);
PHP Classes имеет хороший класс для подсчета строк для php-файлов в каталоге:
http://www.phpclasses.org/package/1091-PHP-Calculates-the-total-lines-of-code-in-a-directory.html
Вы можете указать типы файлов, которые хотите проверить в верхней части класса.
немного грязный, но вы также можете использовать system / exec / passthru wc -l *