Skip to content
Read large files line by line in a memory efficient (constant) way.
Branch: master
Clone or download
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Permalink
Type Name Latest commit message Commit time
Failed to load latest commit information.
src
tests
.gitignore
.scrutinizer.yml
.travis.yml
CHANGELOG.md
LICENSE
README.md
composer.json
infection.json.dist
phpunit.xml.dist

README.md

LineReader

Latest Version on Packagist Software License Build Status Coverage Status Quality Score

LineReader is a library to read large files line by line in a memory efficient (constant) way.

Install

Via Composer

$ composer require bcremer/line-reader

Usage

Given we have a textfile (some/file.txt) with lines like:

Line 1
Line 2
Line 3
Line 4
Line 5
Line 6
Line 7
Line 8
Line 9
Line 10

Also let's assume the namespace is imported to keep the examples dense:

use Bcremer\LineReader\LineReader;

Read forwards

foreach (LineReader::readLines('some/file.txt') as $line) {
    echo $line . "\n"
}

The output will be:

Line 1
Line 2
Line 3
Line 4
Line 5
...

To set an offset or a limit use the \LimitIterator:

$lineGenerator = LineReader::readLines('some/file.txt');
$lineGenerator = new \LimitIterator($lineGenerator, 2, 5);
foreach ($lineGenerator as $line) {
    echo $line . "\n"
}

Will output line 3 to 7

Line 3
Line 4
Line 5
Line 6
Line 7

Read backwards

foreach (LineReader::readLinesBackwards('some/file.txt') as $line) {
    echo $line;
}
Line 10
Line 9
Line 8
Line 7
Line 6
...

Example: Read the last 5 lines in forward order:

$lineGenerator = LineReader::readLinesBackwards('some/file.txt');
$lineGenerator = new \LimitIterator($lineGenerator, 0, 5);

$lines = array_reverse(iterator_to_array($lineGenerator));
foreach ($line as $line) {
    echo $line;
}
Line 6
Line 7
Line 8
Line 9
Line 10

Testing

$ composer test
$ TEST_MAX_LINES=200000 composer test

License

The MIT License (MIT). Please see License File for more information.

You can’t perform that action at this time.