dmt-software / file-stream
Import and export large datasets with a low memory footprint.
v1.0.0-beta
2026-09-16 08:36 UTC
Requires
- php: >=8.4
- ext-iconv: *
- ext-json: *
- ext-libxml: *
- ext-simplexml: *
- ext-xmlreader: *
- ext-xmlwriter: *
- pcrov/jsonreader: ^1.0
Requires (Dev)
- phpunit/phpunit: ^13.3
- symfony/expression-language: ^8.1
Suggests
- symfony/expression-language: For using expressions in filters
Provides
None
Conflicts
None
Replaces
None
This package is auto-updated.
Last update: 2026-09-16 09:19:20 UTC
README
Streaming readers and writers for CSV, JSON and XML.
Installation
composer require dmt-software/file-stream
Reading
Read structured data as objects.
use DMT\FileStream\Config\JsonReaderConfig; use DMT\FileStream\Reader\JsonReader; use DMT\FileStream\Stream\JsonReaderStream; use DMT\FileStream\Structured\Path\DotSeparatedPath; $reader = new JsonReader( new JsonReaderStream(fopen('people.json', 'r')), new JsonReaderConfig( path: new DotSeparatedPath('.people') ) ); foreach ($reader->getResults() as $person) { echo $person->firstName; }
Available readers:
CsvReader
JsonReader
XmlReader
Filtering
Reader results can be filtered and chunked with ReadStatement.
use DMT\FileStream\ReadStatement; $results = (new ReadStatement($reader)) ->where('object.age >= 18') ->limit( offset: 10, limit: 20 ) ->execute();
Offset and limit are applied after filtering.
Writing
Serialize objects directly to a stream.
use ArrayObject; use DMT\FileStream\Config\CsvWriterConfig; use DMT\FileStream\Record\Mapping\Csv\PredefinedNamedColumnMapper; use DMT\FileStream\Stream\ResourceWriterStream; use DMT\FileStream\Writer\CsvWriter; $writer = new CsvWriter( new ResourceWriterStream(fopen('people.csv', 'w')), new CsvWriterConfig( columnMapper: new PredefinedNamedColumnMapper([ 'firstName', 'lastName', 'age', ]) ) ); $writer->write([ new ArrayObject([ 'firstName' => 'John', 'lastName' => 'Doe', 'age' => '42', ]), ]);
Available writers:
CsvWriter
JsonWriter
XmlWriter
Writers flush and close their output stream when writing completes.