|
|
|
|
|
для: isset
(30.07.2005 в 19:12)
| | В самой первой :) Это ед. книга которую мне хватило денег :) Да и наткнулся я на нее случайно. | |
|
|
|
|
|
|
|
для: Akira
(30.07.2005 в 19:05)
| | В какой книге кстати?)
Это не велосипед, скорее всего scandir использует такие же итераторы | |
|
|
|
|
|
|
|
для: Akira
(30.07.2005 в 19:05)
| | Рекомендую прочитать про Iterator-ы, можно из того что выше сделать с файлами все что угодно | |
|
|
|
|
|
|
|
для: isset
(30.07.2005 в 18:56)
| | А что мешает ее запустить рекурсивно? Помните в книге было написано "Не изобретайте велосипеда" :)) Мне кажеться scandir работает пошустрее. | |
|
|
|
|
|
|
|
для: Akira
(30.07.2005 в 18:52)
| | Так она же не обходит вложенные директории, только ту которую укажешь, а то что выше написано рекурсивно обходит | |
|
|
|
|
|
|
|
для: isset
(30.07.2005 в 18:38)
| | Не очень понятно зачем для 5 версии? Там же есть стандартная scandir(). | |
|
|
|
|
|
|
|
для: Akira
(30.07.2005 в 17:44)
| | Ну вот собсна тоже написал, для PHP5:
<?php
// Немного поправляем итератор FilterIterator
class myFilterIterator extends FilterIterator {
private $regexp;
public function accept() {
return preg_match($this->regexp, $this->getFilename());
}
public function regexp($regexp) {
$this->regexp=$regexp;
}
}
$path = "c:/www/"; // Начальная директория
$ext = "\.php|\.sql"; // Расширения, через |, перед точкой ставим \
// Дальше считаем:
$b = new myFilterIterator(new RecursiveIteratorIterator(new RecursiveDirectoryIterator($path)));
$b->regexp('#'.$ext.'$#i');
$count = 0;
foreach($b as $file) {
$content = file($file->getPath().'/'.$file);
$count += count($content);
unset($content);
}
// И выводим
echo $count;
?>
|
| |
|
|
|
|
|
|
|
для: [CHOL]Scorpion
(29.07.2005 в 21:57)
| | Код рекурсивной фукнции scan_dir, которая обходит директории
<?
function scan_dir($dirname)
{
GLOBAL $extentions, $count;
# Если путь пустой, то используем текущий каталог
empty($dirname) ? $dirname = "*" : $dirname = $dirname."/*";
$dir = glob($dirname);
// Если директория существует обходим.
if ($dir)
{
foreach($dir as $filename)
{
if (is_file($filename))
{
// Расширение файла
$ext=strrchr($filename, ".");
foreach($extentions as $exten)
// Если файл попадает под маску,то считаем строки
if(preg_match($exten, $ext))
{
// Читаем содержимое файла
$content = file($filename);
// Подсчтываем число файлов
$count += count($content);
// Удаляем массив
unset($content);
}
}
if (is_dir($filename))
{
scan_dir($filename);
}
}
}
}
?>
|
Код вызова функции scan_dir()
<?
// Имя корневой директории проекта
$dirname = "";
// Массив с расширениями файлов, для которых следует подсчитывать
// число строк
$extentions = array("#.php#i");
// $extentions = array("#\.cpp#i","#\.h#i");
// Счётчик строк - глобальная переменная
$count = 0;
// Вызов функции, осуществляющей рекурсивный спуск по подкаталогам
// корневого каталога
scan_dir($dirname);
// Записываем число строк в переменную $count
file_put_contents("test",$count);
?>
|
| |
|
|
|
|
|
|
|
для: Akira
(29.07.2005 в 15:32)
| | Внесу свою небольшую лепту в общее дело подсчёта строк в проекте.
Мой пример не основан на рекурсии. Ему чужда кроссплатформенность. Он написан для никс систем, поскольку главное - производительность.
<?
$check = array("php","htm","html","tpl"); // массив расширений файлов, в которых будем читать строки
exec ("find ../".$dirname,$files); // $dirname - имя корневой дирректории хоста в системе,
//$files - абсолютно все файлы и дирректории с вложением на любом уровне
for ($i=0; $i<count($files); $i++){ // обходим массив $files
ereg(".+\.(.+)$",$files[$i],$regs); // пишем какое расширение у очередного файла
if (!is_dir($files[$i]) && in_array($regs[1],$check)){ // елси это файл и расширение есть в массиве $check разрешаем считать количество строк
$content = file($files[$i]); // читаем файл в массив
}
if ($content !== False){ // если файл не вернул ошибку, добавляем к общему числу строк, количество строк в файле
$total = $total + count($content);
}
}
echo ("В вашем проекте строк: ".$total);
?>
|
| |
|
|
|
|
|
|
|
для: P@Sol
(29.07.2005 в 15:30)
| | Все сложно и отвлекает от работы :) Я творческий человек, работаю на вдохновление (аналог пиво) | |
|
|
|
|