应使用 league/csv 而非 easy-csv,因后者已归档、不兼容 php 8+ 且无稳定版;league/csv 是事实标准,支持流式处理、bom 自动处理、自定义分隔符及内存安全的大文件操作。

直接用 composer require league/csv 就行,别装 easy-csv —— 它不是主流维护的包,Packagist 上搜不到稳定版本,GitHub 仓库已归档,PHP 8+ 下大概率报错。
为什么找不到 easy-csv?
搜索 Packagist 或运行 composer search easy-csv 会返回空结果;GitHub 上虽有同名仓库,但最后更新是 2019 年,且明确标注 Archived。它依赖过时的 symfony/filesystem v3 和不兼容 PSR-14 的事件系统,PHP 8.1+ 中调用 __invoke 类型声明会直接 fatal error。
该用哪个替代?league/csv 是事实标准
它被 Laravel、Drupal、Symfony 生态广泛集成,支持流式读写、BOM 自动处理、自定义分隔符、类型转换和内存安全的大文件处理。
Miller (mlr) 是一个命令行工具,用于查询、整形和重新格式化名称索引数据,如 CSV、TSV、JSON 和 JSON Lines。它将 awk、sed、cut、join 和 sort 的功能整合到一个专为结构化数据处理而构建的单一工具中。
-
composer require league/csv(最新版默认支持 PHP 8.0–8.3) - 读 CSV:
(new \League\Csv\Reader(fopen('data.csv', 'r')))+->getRecords() - 写 CSV:
$writer = \League\Csv\Writer::createFromPath('out.csv', 'w')+$writer->insertOne([...]) - 注意:默认编码是 UTF-8;若源文件含 BOM,
Reader::createFromFileObject()会自动剥离
常见踩坑点
不是所有 CSV 都规整,这几个细节不处理,数据就 silently 错位:
- 字段含换行符或双引号?必须用
$reader->setDelimiter(',')+$reader->setEnclosure('"')显式设置,不能依赖默认 - 中文表头乱码?确认文件本身是 UTF-8 编码,不要用
iconv('gbk', 'utf-8', ...)二次转——league/csv不吃这个 - 大文件内存爆掉?别用
->getRecords()->toArray(),改用foreach ($reader as $row)迭代流式处理 - 写入时 Excel 打开显示乱码?在
fopen('file.csv', 'w')前先输出 BOM:file_put_contents('file.csv', "\xEF\xBB\xBF", FILE_APPEND);
真正麻烦的从来不是“装哪个包”,而是 CSV 的实际格式是否遵守 RFC 4180、有没有 Excel 私有扩展、BOM 是否混用、空行怎么算有效记录——这些得靠 league/csv 提供的底层控制能力去对齐,而不是指望某个叫 easy- 的名字帮你兜底。
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!










