Php 拆分大型csv文件
我正在尝试拆分大型csv文件。现在我只能拆分包含50k列的csv文件。每当我尝试拆分100k列时,它都不起作用 我搞不清楚出了什么问题 以下是我用于100k的拆分器的代码:Php 拆分大型csv文件,php,csv,Php,Csv,我正在尝试拆分大型csv文件。现在我只能拆分包含50k列的csv文件。每当我尝试拆分100k列时,它都不起作用 我搞不清楚出了什么问题 以下是我用于100k的拆分器的代码: $inputFile = 'uploads/uploaded.csv'; $outputFile = 'uploads/output'; $rows = array_map('str_getcsv', file($inputFile)); $header = array_shift($rows); $splitSize
$inputFile = 'uploads/uploaded.csv';
$outputFile = 'uploads/output';
$rows = array_map('str_getcsv', file($inputFile));
$header = array_shift($rows);
$splitSize = 50000;
$in = fopen($inputFile, 'r');
fgetcsv($in, 1000, ",");
//array for file name
$stored_names = array();
$rowCount = 0;
$fileCount = 1;
//split csv
while (!feof($in)) {
if (($rowCount % $splitSize) == 0) {
if ($rowCount > 0) {
fclose($out);
}
$super_file_name = $outputFile . $fileCount++;
array_push($stored_names,$super_file_name.'.csv');
$out = fopen($super_file_name. '.csv', 'w');
//insert header
fputcsv($out,$header);
// array_push($stored_names,$out);
}
$data = fgetcsv($in);
if ($data)
fputcsv($out,$data);
$rowCount++;
}
fclose($out);
我猜您的问题是基于以下代码的内存限制:
$rows = array_map('str_getcsv', file($inputFile));
$header = array_shift($rows);
这会将整个文件读入内存,将其拆分为一个数组,然后弹出第一行,并丢弃其余的。因为您只需要第一行,所以不需要读取整个文件。相反,只需做如下事情:
$fp = fopen($inputFile, 'r');
$headers = fgetcsv($fp);
然后您已经打开了
$fp
,并指向拆分过程的第一个数据行。是否有任何错误日志?到底是什么不起作用?发生了什么?file()
将整个文件读取到内存中。你可能达到了内存限制。每当我上传完100k csv文件,它就会停止加载。@AlexHowansky我怎么能增加它?不要增加它。内存不是问题,获取标题行的方法是。也就是说,您将整个文件读入内存只是为了得到第一行。不要那样做。