PHP拆分大csv文件为多个小文件,并按序号规律命名,用于大csv文件拆分小文件导入
代码说明:
-
首先打开A.csv文件,并读取第一行字段。
-
然后设置每个文件的最大大小为4MB,并初始化文件大小为0,文件编号为1,文件名为B_1.csv。
-
接着打开输出文件B_1.csv,并写入第一行字段。
-
循环读取A.csv文件中的数据,计算数据大小,如果文件大小超过最大值,则关闭当前文件,打开新文件,并写入第一行字段。
-
最后写入数据,并更新文件大小。
<?php
//设置文件路径
$file_path = 'A.csv';
//打开文件
$file = fopen($file_path, 'r');
//读取第一行字段
$fields = fgetcsv($file);
//设置每个文件的最大大小
$max_size = 4 * 1024 * 1024; //4MB
//初始化文件大小
$file_size = 0;
//初始化文件编号
$file_number = 1;
//初始化文件名
$file_name = 'B_' . $file_number . '.csv';
//打开输出文件
$output_file = fopen($file_name, 'w');
//写入第一行字段
fputcsv($output_file, $fields);
//循环读取数据
while (($data = fgetcsv($file)) !== false) {
//计算数据大小
$data_size = strlen(implode(',', $data));
//如果文件大小超过最大值,则关闭当前文件,打开新文件
if ($file_size + $data_size > $max_size) {
fclose($output_file);
$file_number++;
$file_name = 'B_' . $file_number . '.csv';
while (file_exists($file_name)) {
$file_number++;
$file_name = 'B_' . $file_number . '.csv';
}
$output_file = fopen($file_name, 'w');
fputcsv($output_file, $fields);
$file_size = 0;
}
//写入数据
fputcsv($output_file, $data);
$file_size += $data_size;
}
//关闭文件
fclose($file);
fclose($output_file);
?>