1.分割csv文件
<?php
$jobDir = ".";
$files = [];
$lineCount = 0;
$filePath = $jobDir . '/all.csv';
//var_dump($filePath);die;
$file = new \SplFileObject($filePath);
$file->seek($file->getSize());
$totalcsvline = $file->key();
$file = null;
$file = new \SplFileObject($filePath);
$chunk = 0;
if ($totalcsvline <= 2500) {
$chunk = "last";
}
$chunkFilename = $jobDir . '/chunk_' . $chunk . '.csv';
$files[] = $chunkFilename;
$chunkFile = new \SplFileObject($chunkFilename, 'w+');
$j =1;
$lastpage = ceil($totalcsvline/2500);
echo "最后一页".$lastpage."\n";
while (!$file->eof()) {
$lineCount++;
//echo $lineCount."*";
if ($lineCount >= 2500) {
$j++;
echo "\n".$j."chunk_' . $chunk . '.csv'";
if ($j == $lastpage){
$chunk = "last";
}
$chunkFile = null;
$lineCount = 0;
$chunk++;
$chunkFilename = $jobDir . '/chunk_' . $chunk . '.csv';
$files[] = $chunkFilename;
$chunkFile = new \SplFileObject($chunkFilename, 'w+');
}
$line = $file->fgets();
$chunkFile->fwrite($line);
}
//$lastFile = array_pop($files);
//$this->filesystem->rename($lastFile, $jobDir . '/chunk_last.csv', true);
//$files[] = $jobDir . '/chunk_last.csv';
return $files;
2.合并csv文件
<?php
$fileA = "./chunk_0.csv";
$fileB = "./chunk_1.csv";
$destinationFile = "./new.csv";
copy($fileA, $destinationFile);
$contentFile = fopen($fileB, 'r');
file_put_contents($destinationFile, $contentFile, FILE_APPEND); // Stream contents into file
//unlink($fileA); //删除文件
//unlink($fileB);