The League of Extraordinary Packages

Our Packages:

Presented by The League of Extraordinary Packages

Getting Started


Upgrading Guide

Basic usage

Tips: Even though you can use the following methods with the League\Csv\Writer object. It is recommended to do so with the League\Csv\Reader class to avoid losing the file cursor position and getting unexpected results when inserting new data.

Once your CSV object is instantiated and configured, you can start interacting with the data using a number of methods available to you.

Iterating over the CSV rows

The CSV object implements PHP’s IteratorAggregate interface


public AbstractCsv::getIterator(void): Iterator

You can iterate over your CSV object to extract each CSV row using the foreach construct.


use League\Csv\Reader;

$reader = Reader::createFromPath('/path/to/my/file.csv');
foreach ($reader as $index => $row) {
    //do something meaningful here with $row !!
    //$row is an array where each item represent a CSV data cell
    //$index is the CSV row index

You can do more complex iterations using the query methods available on the League\Csv\Reader class only.

Outputting the CSV


Returns the string representation of the CSV document


public AbstractCsv::__toString(void): string

Use the echo construct on the instantiated object or use the __toString method to show the CSV full content.



use League\Csv\Reader;

$reader = Reader::createFromPath('/path/to/my/file.csv');
echo $reader;
// or
echo $reader->__toString();


If you only wish to make your CSV downloadable by forcing a file download just use the output method to force the use of the output buffer on the CSV content.


public AbstractCsv::output(string $filename = null): int

Example 1 - default usage


use League\Csv\Reader;

header('Content-Type: text/csv; charset=UTF-8');
header('Content-Disposition: attachment; filename="name-for-your-file.csv"');

$reader = Reader::createFromPath('/path/to/my/file.csv');

Example 2 - using the $filename argument


use League\Csv\Reader;

$reader = Reader::createFromPath('/path/to/my/file.csv');

Example 3 - using a Response object (Symfony, Laravel, PSR-7 etc)

To avoid breaking the flow of your application, you should create a Response object when applicable in your framework. The actual implementation will differ per framework, but you should generally not output headers directly.
In some cases you can also use a Streaming Response for larger files.


use League\Csv\Reader;

$reader = Reader::createFromPath('/path/to/my/file.csv');
return new Response((string) $reader, 200, [
	'Content-Type' => 'text/csv; charset=UTF-8',
	'Content-Disposition' => 'attachment; filename="name-for-your-file.csv"',


The output methods can only be affected by:

No other method or property have effect on them.