Определить, если файл имеет более X строк? - PullRequest
2 голосов
/ 18 августа 2010

, так как я не смог найти функцию, которая получает количество строк в файле, мне нужно использовать

$handle = fopen("file.txt");

For($Line=1; $Line<=10; $Line=$Line+1){
 fgets($handle);
}

If feof($handle){
 echo "File has 10 lines or more.";
}Else{
 echo "File has less than 10 lines.";
}

fclose($handle)

или что-то подобное?Все, что я хочу знать, это если файл имеет более 10 строк или нет: -).

Заранее спасибо!

Ответы [ 4 ]

4 голосов
/ 18 августа 2010

Вы можете получить количество строк, используя:

$file = 'smth.txt';    
$num_lines = count(file($file));
2 голосов
/ 18 августа 2010

Эти большие проблемы будут возникать, если у вас есть БОЛЬШОЙ файл, PHP имеет тенденцию замедлять некоторые. Почему бы не выполнить команду exec и позволить системе вернуть число? Тогда вам не нужно беспокоиться о накладных расходах PHP для чтения файла.

$count = exec("wc -l /path/to/file");

Или, если вы хотите стать более модным:

$count = exec("awk '// {++x} END {print x}' /path/to/file");
2 голосов
/ 18 августа 2010

Быстрее, больше ресурсов, ресурсов:

$file = new SplFileObject('file.txt');
$file->seek(9);
if ($file->eof()) {
 echo 'File has less than 10 lines.';
} else {
 echo 'File has 10 lines or more.';
}

SplFileObject

0 голосов
/ 19 августа 2010

Если у вас большой файл, то лучше читать файлы в сегментах и ​​считать символы \ n или что-либо еще как символ линейного конца, например, в некоторых системах вам также понадобится счетчик \ r или что-то еще .. .

$lineCounter=0;
$myFile =fopen('/pathto/file.whatever','r');
   while ($stringSegment = fread($myFile, 4096000)) {
$lineCounter += substr_count($stringSegment, "\n");
}
...