用 fopen() 打开 csv,再用 fgetcsv() 每次读取一条记录。处理完当前行就继续读下一行,避免把全表积存在数组里,也能正确读取引号内的逗号。
准备带引号字段的测试 CSV
将下面内容保存为 UTF-8 无 BOM 的 sales.csv。金额用整数分表示。
name,amount_cents "桌面,小号",1200 收纳盒,350

第二行的逗号属于商品名称,不能直接用 explode 按逗号分割。
循环读取并立即累计
将代码保存为 sum-csv.php。第 5 个参数显式指定为空字符串,以使用标准双引号转义。
<?php $file = fopen(__DIR__ . '/sales.csv', 'rb');
if ($file === false) {
throw new RuntimeException('Cannot open sales.csv');
}
try {
if (fgetcsv($file, 0, ',', '"', '') !== ['name', 'amount_cents']) {
throw new RuntimeException('Unexpected CSV header');
}
$count = 0;
$total = 0;
while (($row = fgetcsv($file, 0, ',', '"', '')) !== false) {
if ($row === [null]) {
continue;
}
if (count($row) !== 2 || !ctype_digit($row[1])) {
throw new RuntimeException('Invalid CSV record');
}
$count++;
$total += (int) $row[1];
}
printf("%d rows, %d cents\n", $count, $total);
} finally {
fclose($file);
}
本例假定金额和合计在 PHP 整数范围内。实际导入还要确认编码、分隔符及字段范围。
核对读取结果和错误分支
运行脚本。再临时把某条金额改成非数字,验证错误处理。
php sum-csv.php
正常结果是 2 rows, 1550 cents。非法金额应触发异常。用于大文件时,避免在循环里把每条记录再加入结果数组。
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











