League\Csv is a simple library to ease CSV parsing, writing and filtering in PHP. The goal of the library is to be as powerful while remaining lightweight, by utilizing PHP native classes whenever possible.
League\Csv was designed for developers who wants to deal with CSV data using modern code and without the high levels of bootstrap and low-levels of usefulness provided by existing core functions or third party-code.
This package is compliant with PSR-1, PSR-2, and PSR-4.
You need PHP >= 5.4.0 and the mbstring
extension to use League\Csv
but the latest stable version of PHP is recommended.
Install the csv
package with Composer.
{
"require": {
"league/csv": "5.*"
}
}
Csv has full documentation, powered by Sculpin.
Contribute to this documentation in the sculpin branch.
-
When creating a file using the library, first insert all the data that need to be inserted before starting manipulating the CSV. If you manipulate your data before insertion, you may change the file cursor position and get unexpected results.
-
If you are dealing with non-unicode data, specify the encoding parameter using the
setEncoding
method otherwise your output conversions may no work. -
If you have your LC_CTYPE set to a locale that's using UTF-8 and you try to parse a file that's not in UTF-8, PHP will cut your fields the moment it encounters a byte it can't understand (i.e. any outside of ASCII that doesn't happen to be part of a UTF-8 character which it likely isn't). This gist will show you a possible solution to this problem by using PHP stream filter. This tip is from Philip Hofstetter
-
When merging multiples CSV documents don't forget to set the main CSV object as a
League\Csv\Writer
object with the$open_mode = 'a+'
to preserve its content. This setting is of course not required when your mainLeague\Csv\Writer
object is created from String -
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", true);
}
$ phpunit
Please see CONTRIBUTING for details.