Функция предназначена для подсчёта числа строк в программных проектах, состоящих из множества вложенных директорий. Конечно, число строк не может свидетельствовать в полной мере о затраченных усилиях и времени на программный проект, но является важным показателем в оценке сложности проекта. Код рекурсивной фукнции scan_dir, которая обходит директории <?php
//////////////////////////////////////////////////////////
// Рекурсивная функция - спускаемся вниз по каталогу
//////////////////////////////////////////////////////////
function scan_dir($dirname)
{
// Объявляем переменные замены глобальными
GLOBAL $extentions, $count;
// Открываем текущую директорию
$dir = opendir($dirname);
// Читаем в цикле директорию
while (($file = readdir($dir)) !== false)
{
// Если файл обрабатываем его содержимое
if($file != "." && $file != "..")
{
// Если имеем дело с файлом - производим в нём замену
if(is_file($dirname."/".$file))
{
// Извлекаем из имени файла расширение
$ext = strrchr($dirname."/".$file, ".");
foreach($extentions as $exten)
if(preg_match($exten, $ext))
{
// Читаем содержимое файла
$content = file($dirname."/".$file);
// Подсчтываем число файлов
$count += count($content);
// Удаляем массив
unset($content);
}
}
// Если перед нами директория, вызываем рекурсивно
// функцию scan_dir
if(is_dir($dirname."/".$file))
{
scan_dir($dirname."/".$file);
}
}
}
// Закрываем директорию
closedir($dir);
}
?>
Воспользоваться результатами можно при помощи следующего кода Код вызова функции scan_dir() <?php
// Имя корневой директории проекта
$dirname = "softtime";
// Массив с расширениями файлов, для которых следует подсчитывать
// число строк
$extentions = array("#\.php#i");
// $extentions = array("#\.cpp#i","#\.h#i");
// Счётчик строк - глобальная переменная
$count = 0;
// Вызов функции, осуществляющей рекурсивный спуск по подкаталогам
// корневого каталога
scan_dir($dirname);
// Записываем число строк в переменную $count
file_put_contents("test",$count);
?>
|