Getting Started


Upgrading Guide

This is the documentation for the unsupported version 7.0. Please consider upgrading your code to the latest stable version


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', 'r');
//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!