比较PHP中的两个CSV文件内存不足

时间:2017-03-14 11:12:19

标签: php csv file-upload

我正在比较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;
}

1 个答案:

答案 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);

您可能还应该处理文件读取错误