Document loading

Because CSV documents come in different forms, we use named constructors to offer several ways to load them.

Loading from a string

This new API is introduced in version 9.27.0

public static AbstractCsv::fromString(string $content = ''): self

Create a new object from a given string.

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

$reader = Reader::fromString('john,doe,john.doe@example.com');
$writer = Writer::fromString('john,doe,john.doe@example.com');

The $content argument default value is an empty string to ease usage.

Loading from a file or a stream

This new API is introduced in version 9.27.0

public static AbstractCsv::from(
    SplFileInfo|SplFileObject|resource|string $filename,
    string $mode = 'r+',
    resource $context = null
): self

If an string or a SplFileInfo object is given as the $filename argument, a new instance is created à la fopen and the $mode and the $context parameters are taking into account.

Otherwise, when a stream resource or an SplFileObject instance is given both arguments are ignored.

Since version 9.27.0 the following methods are deprecated:
  • createFromPath()
  • createFromStream()
  • createFromFileObject()
use League\Csv\Reader;
use League\Csv\Writer;

$reader = Reader::from('/path/to/your/csv/file.csv', 'r');
$writer = Writer::from('/path/to/your/csv/file.csv', 'w');

$reader = Reader::from(fopen('/path/to/the/file.csv', 'r+'));
$writer = Writer::from(tmpfile());

$reader = Reader::from(new SplFileInfo('/path/to/your/csv/file.csv'));
$writer = Writer::from(new SplTempFileObject());
The $mode argument defaults to:
  • r+ for the Writer class
  • r for the Reader class

The method allows loading non-seekable stream resource.

Legacy API

The following methods are all deprecated as of version 9.27.0

Since version 9.1.0 non-seekable CSV documents can be used but exceptions will be thrown if features requiring a seekable CSV document are used.

Loading from a string

public static AbstractCsv::createFromString(string $content = ''): self

Creates a new object from a given string.

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

$reader = Reader::createFromString('john,doe,john.doe@example.com');
$writer = Writer::createFromString('john,doe,john.doe@example.com');

Since version 9.2.0 the $content argument default value is an empty string to ease usage.

Loading from a file path

public static AbstractCsv::createFromPath(
    string $path,
    string $open_mode = 'r+',
    resource $context = null
): self

Creates a new object à la fopen.

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

$reader = Reader::createFromPath('/path/to/your/csv/file.csv', 'r');
$writer = Writer::createFromPath('/path/to/your/csv/file.csv', 'w');
Starting with version 9.1.0, $open_mode defaults to:
  • r+ for the Writer class
  • r for the Reader class

Loading from a resource stream

public static AbstractCsv::createFromStream(resource $stream): self

Creates a new object from a stream resource.

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

$reader = Reader::createFromStream(fopen('/path/to/the/file.csv', 'r+'));
$writer = Writer::createFromStream(tmpfile());

Prior to version 9.1.0, the method would throw a League\Csv\Exception for a non-seekable stream resource.

Loading from a SplFileObject object

public static AbstractCsv::createFromFileObject(SplFileObject $file): self

Creates a new object from 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());

Accessing the CSV document path

New in version 9.2.0

public AbstractCsv::getPathname(): string

Once instantiated, the getPathname method returns the pathname of the underlying document.

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

Reader::from(new SplFileObject('/path/to/your/csv/file.csv'))->getPathname();
//returns '/path/to/your/csv/file.csv'
Writer::from(new SplTempFileObject())->getPathname();
//returns php://temp