Composer怎么安装League/Csv库 处理CSV文件教程【实操】

10次阅读

php 7.4 需安装 league/csv:^8.3,PHP 8.0+ 可直接装最新版;读取时用 Reader::createFromPath() 并设 ‘r’ 模式,处理 bom 需 addFilter 或手动跳过,迭代须 try/catch 防崩。

Composer怎么安装League/Csv库 处理CSV文件教程【实操】

直接用 composer require league/csv 就能装,但默认装的是 v9+(PHP 8.0+),如果你用 PHP 7.4 或更低版本,会报错或装不上。

确认 PHP 版本再选对版本号

League/Csv 的 v9 要求 PHP ≥ 8.0;v8 支持 PHP 7.2–7.4;v7 已废弃且不安全。装错版本会导致 class 'LeagueCsvReader' not found 或 Composer 直接拒绝安装。

  • 运行 php -v 查看当前 PHP 版本
  • PHP 8.0+:直接 composer require league/csv
  • PHP 7.4:必须指定 composer require league/csv:^8.3^8.3 是最后一个支持 7.4 的小版本)
  • PHP 7.2–7.3:用 composer require league/csv:^8.0

读取 CSV 文件的基本写法(别漏掉 use)

装完后不能直接 new Reader,得先 use 对应类,而且 v9 和 v8 的命名空间一致,但构造方式略有不同——v9 推荐用 Reader::createFromPath(),v8 也支持但文档更倾向 new Reader()

  • 推荐统一写法(兼容 v8/v9):
    use LeagueCsvReader;  $csv = Reader::createFromPath('/path/to/data.csv', 'r'); $csv->setDelimiter(','); // 显式设分隔符更稳妥 foreach ($csv as $row) {     echo $row[0] ?? '' . PHP_EOL; }
  • 如果用 new Reader(),v8 没问题,v9 仍可用但已标记为 legacy;v9 中 new Reader() 不再接受文件路径参数,必须传 stream 实例
  • 常见坑:createFromPath() 第二个参数必须是 'r'(只读),写成 'rb' 或空字符串会导致 Invalid stream Resource

处理带 BOM 的 UTF-8 CSV 文件

windows excel 导出的 CSV 经常带 UTF-8 BOM(xEFxBBxBF),不处理会导致第一列字段名开头多出乱码,比如 name

  • createFromPath() 后加一行:$csv->addFilter('convert.iconv.UTF-8//IGNORE');(v8/v9 都支持)
  • 更彻底的做法:用 fopen 手动跳过 BOM 再传 Stream:
    $handle = fopen('/path/to/data.csv', 'r'); if (fgets($handle, 4) !== "xEFxBBxBF") fseek($handle, 0); $csv = Reader::createFromStream($handle);
  • 别依赖 mb_convert_encoding() 在读取后清理——BOM 影响的是字段名解析,不是内容本身

真正麻烦的不是安装,而是 CSV 编码、BOM、换行符混用(rn vs n)和引号转义逻辑——这些细节 League/Csv 虽然封装了,但一旦原始文件不规范,foreach 迭代时就可能崩在某一行,最好加 try/catch 包住单行处理。

text=ZqhQzanResources