The League of Extraordinary Packages

Our Packages:

Presented by The League of Extraordinary Packages

Getting Started


Upgrading Guide


The library is composed of two main classes:

Both classes extend the League\Csv\AbstractCsv class and as such share methods for instantiation.

Mac OS Server

If you are on a Mac OS X Server, add the following lines before using the library to help PHP detect line ending in Mac OS X.


if (! ini_get("auto_detect_line_endings")) {
    ini_set("auto_detect_line_endings", '1');

//the rest of the code continues here...

Instantiating a new CSV object

Because CSVs come in different forms we used named constructors to offer several ways to instantiate the library objects.

createFromPath($path, $open_mode)

This named constructor will create a new object à la fopen:

Warning: The method throws an InvalidArgumentException if a SplTempFileObject is given as no path can be retrieve from such object.

The resulting string and $open_mode parameters are used to lazy load internally a SplFileObject object.


use League\Csv\Reader;
use League\Csv\Writer;

$reader = Reader::createFromPath('/path/to/your/csv/file.csv');
//the $reader object will use the 'r+' open mode as no `open_mode` parameter was supplied.
$writer = Writer::createFromPath(new SplFileObject('/path/to/your/csv/file.csv', 'a+'), 'w');
//the $writer object open mode will be 'w'!!

createFromFileObject(SplFileObject $obj)

If you have a SplFileObject and you want to directly work with it you should use the createFromFileObject named constructor. This method accepts only one single parameter, a SplFileObject object.


use League\Csv\Reader;
use League\Csv\Writer;

$reader = Reader::createFromFileObject(new SplFileObject('/path/to/your/csv/file.csv'));
$writer = Writer::createFromFileObject(new SplTempFileObject());

createFromString($str, $newline = “\n”)

The $newline argument was added in version 7.0

If you have a raw CSV string use the createFromString named constructor. This method accepts two parameters:

If no newline sequence is specified, the newline sequence used will be \n to match the one added by PHP fputcsv function.

The $newline argument is deprecated since version 7.2 and will be removed in the next major release.


use League\Csv\Reader;
use League\Csv\Writer;

$reader = Reader::createFromString('john,doe,', "\n");
$writer = Writer::createFromString('john,doe,', "\r\n");

Starting with version 7.0 directly using the default constructor is no longer possible.

Switching from one class to the other

At any given time you can switch or create a new League\Csv\Writer or a new League\Csv\Reader from the current object. to do so you can use the following methods.

Both methods accept an optional $open_mode parameter.


$reader = $writer->newReader('r+');
$newWriter = $reader->newWriter('a');
$anotherWriter = $newWriter->newWriter('r+');

Warning: be careful the $newWriter and $anotherWriter object are not the same as the $writer object!