繁体   English   中英

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

[英]Comparing two CSV files in PHP out of memory

我正在比较PHP中的两个CSV文件。 我只想知道列名是相同的,并且对数据不感兴趣(至少现在是这样)。

这是一个通用脚本,可以处理我选择上传的任何CSV文件。 我将要上传的文件与设置的样本文件进行比较(因此,只有提供了样本,我才能上传该文件)。 该样本文件仅包含几行数据,因此不会很大。 我上传的文件范围从500kb到大约10mb(我上传的文件是7,827,180字节)。

直到今天,当我开始收到此消息时,一切都很好:“致命错误:C:\\ xampp \\ htdocs \\ errcoaching \\ app \\ handlers \\ file_upload_parse.php中的内存不足(已分配524288)(试图分配7835372字节) 8”(第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;
}

您正在将整个文件读入数组,然后除第一行以外的所有内容都被丢弃。

相反,您可以使用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);

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM