我正在比较PHP中的两个CSV文件。我只对知道列名相同且对数据不感兴趣(至少目前为止)感兴趣。
这是一个通用脚本,可处理我选择上传的任何CSV文件。我上传的文件将与设置的示例文件进行比较(因此,如果提供了样本,我只能上传文件)。此示例文件仅包含几行数据,因此在任何范围内都不会很大。我上传的文件范围从500kb到大约10mb(我上传的文件是7,827,180字节)。
直到今天,当我开始收到此消息时,一切都很好: "致命错误:第8行和第34行的C:\ xampp \ htdocs \ errcoaching \ app \ handlers \ file_upload_parse.php内存不足(分配524288)(试图分配7835372字节); (第8行是指我的样本中的第2行(我的函数中的第一行)。
function check_csv($f_a, $f_b){
$csv_upload = array_map("str_getcsv", file($f_a,FILE_SKIP_EMPTY_LINES))[0]; // This is line 8
$csv_sample = array_map("str_getcsv", file($f_b,FILE_SKIP_EMPTY_LINES))[0];
$match = 'true';
foreach ($csv_sample as $key => $value) {
if($value != $csv_upload[$key]){
$match = 'false';
break 1;
}
}
return $match;
}
答案 0 :(得分:0)
您正在将整个文件读入一个数组,然后对第一行以外的所有文件进行处理。
相反,您可以使用http://php.net/manual/en/function.fgetcsv.php仅读取第一行:
$handle_a = fopen($f_a, "r");
$handle_b = fopen($f_b, "r");
$csv_upload = fgetcsv($handle_a);
$csv_sample = fgetcsv($handle_b);
//the rest of your code
fclose($handle_a);
fclose($handle_b);
您可能还应该处理文件读取错误