18.6. Counting Lines, Paragraphs, or Records in a File
Problem
You want to count the number of lines, paragraphs, or records in a file.
Solution
To count lines, use fgets( )
.
Because it reads a line at a time, you can count the number of times
it’s called before reaching the end of a file:
$lines = 0; if ($fh = fopen('orders.txt','r')) { while (! feof($fh)) { if (fgets($fh,1048576)) { $lines++; } } } print $lines;
To count paragraphs, increment the counter only when you read a blank line:
$paragraphs = 0; if ($fh = fopen('great-american-novel.txt','r')) { while (! feof($fh)) { $s = fgets($fh,1048576); if (("\n" == $s) || ("\r\n" == $s)) { $paragraphs++; } } } print $paragraphs;
To count records, increment the counter only when the line read contains just the record separator and whitespace:
$records = 0; $record_separator = '--end--'; if ($fh = fopen('great-american-novel.txt','r')) { while (! feof($fh)) { $s = rtrim(fgets($fh,1048576)); if ($s == $record_separator) { $records++; } } } print $records;
Discussion
In the line counter, $lines
is incremented only if
fgets( )
returns a true value. As fgets( )
moves through the file, it returns each line it
retrieves. When it reaches the last line, it returns
false
, so $lines
doesn’t get incorrectly incremented. Because EOF has
been reached on the file, feof( )
returns
true
, and the while
loop ends.
This paragraph counter works fine on simple text but may produce unexpected results when presented with a long string of blank lines or a file ...
Get PHP Cookbook now with the O’Reilly learning platform.
O’Reilly members experience books, live events, courses curated by job role, and more from O’Reilly and nearly 200 top publishers.