Просто хотел подсчитать общее количество строк из всех файлов из папки. следующая функция php помогает мне подсчитать число строк только для определенного файла. просто интересно, каков путь к общему количеству строк из папки.
$lines = COUNT(FILE($file));
Спасибо.!
То же, что и выше (ответ salathe), за исключением того, что он печатает количество строк (теперь в php7), а не пучок сообщений об ошибках.
$files = new RecursiveIteratorIterator(new RecursiveDirectoryIterator(__DIR__)); $lines = 0; foreach ($files as $fileinfo) { if (!$fileinfo->isFile()) { continue; } $read = $fileinfo->openFile(); $read->setFlags(SplFileObject::READ_AHEAD); $lines += iterator_count($read) - 1; // -1 gives the same number as "wc -l" } echo ("Found :$lines");
Вы можете перебирать каталог и подсчитывать каждый файл и суммировать их все. И вы используете функцию file()
, которая будет загружать весь контент в память, если файл очень большой, ваш php-скрипт достигнет предела памяти вашей конфигурации.
Если вы можете использовать внешнюю команду, есть решение с одной строкой. (Если вы используете окна, просто опустите его.)
$total = system("find $dir_path -type f -exec wc -l {} \; | awk '{total += $1} END{print total}'");
Что-то вроде этого возможно:
<?php $line_count = 0; if ($handle = opendir('some/dir/path')) { while (false !== ($entry = readdir($handle))) { if (is_file($entry)) { $line_count += count(file($entry)); } } closedir($handle); } var_dump($line_count); ?>
Проверьте стандартную библиотеку PHP (она же SPL) для DirectoryIterator:
$dir = new DirectoryIterator('/path/to/dir'); foreach($dir as $file ){ $x += (isImage($file)) ? 1 : 0; }
(FYI есть недокументированная функция, называемая iterator_count (), но, вероятно, лучше не полагаться на нее, пока я себе представляю. И вам нужно будет отфильтровать невидимые вещи, как и все равно.)
или попробуйте следующее:
см. url: – http://www.brightcherry.co.uk/scribbles/php-count-files-in-a-directory/
$directory = "../images/team/harry/"; if (glob($directory . "*.jpg") != false) { $filecount = count(glob($directory . "*.jpg")); echo $filecount; } else { echo 0; }
Очень простой пример подсчета строк может выглядеть примерно так: это дает те же цифры, что и ответ xdazz .
<?php $files = new RecursiveIteratorIterator(new RecursiveDirectoryIterator(__DIR__)); $lines = $files = 0; foreach ($files as $fileinfo) { if (!$fileinfo->isFile()) { continue; } $files++; $read = $fileinfo->openFile(); $read->setFlags(SplFileObject::READ_AHEAD); $lines += iterator_count($read) - 1; // -1 gives the same number as "wc -l" } printf("Found %d lines in %d files.", $lines, $files);
Смотрите также
RecursiveDirectoryIterator
SplFileInfo
SplFileObject
RecursiveIteratorIterator
iterator_count()