Weave Code
Code Weaver
Helps Laravel developers discover, compare, and choose open-source packages. See popularity, security, maintainers, and scores at a glance to make better decisions.
Feedback
Share your thoughts, report bugs, or suggest improvements.
Subject
Message

Csv Laravel Package

league/csv

View on GitHub
Deep Wiki
Context7

layout: default title: CSV documents configurations description: The different ways to access CSV documents

Overview

Connection type

Accessing the CSV document is done using one of the following classes:

Both classes extend the League\Csv\AbstractCsv class and as such share the following features:

OS specificity

If your CSV document was created or is read on a Legacy Macintosh computer, add the following lines before using the library to help PHP detect line ending.

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

Deprecation Notice

Starting with PHP8.4+, because the library is built using the native CSV features of PHP your code may start emitting deprecation notices. To avoid those deprecations you must explicitly set the escape control character to be the empty string as shown in the example below:

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

$csv = Reader::from('/path/to/file.csv', 'r');
$csv->setEscape(''); //required in PHP8.4+

$writer = Writer::fromString();
$writer->setEscape(''); //required in PHP8.4+

Doing so will prevent any deprecation notice. Of course, you are required to review on a case-by-case basis these changes as they may introduce some parsing bugs while reading existing CSV documents. A way to mitigate these issues is to re-encode your CSV documents and strip away the deprecated escape mechanism all together. This can be done using the script below:

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

$csv = Reader::from('/path/to/file_with_escape_character.csv', 'r');
$writer = Writer::from('/path/to/file_without_escape_character.csv', 'w');
$writer->setEscape('');
$writer->setDelimiter($csv->getDelimiter()); //we re-use the old document character controls
$writer->setEnclosure($csv->getEnclosure()); //we re-use the old document character controls

$writer->insertAll($csv); // deprecation notice from reading the old file will be emitted!

This straightforward strategy using the package will re-encode your old CSV documents. After that, you can use the new document by setting the escape character to the empty string, and you will never get any deprecation notice again. And since you created a new document it is easy to validate that your new document still contains the same data.

Of course, it is highly recommended to adapt this script so that it can fit in your application lifecycle.

Exceptions

The default exception class thrown while using this library is League\Csv\Exception which extends PHP Exception class.

use League\Csv\Exception;
use League\Csv\Reader;

try {
    $csv = Reader::from('/path/to/file.csv', 'r');
    $csv->setDelimiter('toto');
} catch (Exception $e) {
    echo $e->getMessage(), PHP_EOL;
}

When using a non-seekable SplFileObject, a RuntimeException is thrown instead of a League\Csv\Exception when using features that require a seekable CSV document. In the following example a seekable CSV document is required to update the inserted end of line sequence.

use League\Csv\Exception;
use League\Csv\Writer;

try {
    $csv = Writer::from(new SplFileObject('php://output', 'w'));
    $csv->setEndOfLine("\r\n");
    $csv->insertOne(["foo", "bar"]);
} catch (Exception | RuntimeException $e) {
    echo $e->getMessage(), PHP_EOL;
}

//in order to change the CSV document end of line a seekable CSV document is required
Weaver

How can I help you explore Laravel packages today?

Conversation history is not saved when not logged in.
Prompt
Add packages to context
No packages found.
davejamesmiller/laravel-breadcrumbs
artisanry/parsedown
christhompsontldr/phpsdk
enqueue/dsn
bunny/bunny
enqueue/test
enqueue/null
enqueue/amqp-tools
milesj/emojibase
bower-asset/punycode
bower-asset/inputmask
bower-asset/jquery
bower-asset/yii2-pjax
laravel/nova
spatie/laravel-mailcoach
spatie/laravel-superseeder
laravel/liferaft
nst/json-test-suite
danielmiessler/sec-lists
jackalope/jackalope-transport