Php 将CSV文件拆分为6MB文件
我正在尝试将CSV文件划分为6mb文件。以下是我尝试过的代码Php 将CSV文件拆分为6MB文件,php,Php,我正在尝试将CSV文件划分为6mb文件。以下是我尝试过的代码 $file = 'upload/L_10001_20200916183801.csv'; $files = SplitCSVBySize($file, 10001); function SplitCSVBySize($Existingfiles, $AccountId, $splitSize = "") { $fh = fopen($Existingfiles, 'r'); $headers =
$file = 'upload/L_10001_20200916183801.csv';
$files = SplitCSVBySize($file, 10001);
function SplitCSVBySize($Existingfiles, $AccountId, $splitSize = "") {
$fh = fopen($Existingfiles, 'r');
$headers = fgetcsv($fh);
$files = array();
$filepath = 'upload/' . 'L_' . $AccountId . '_' . date('YmdHis') . '.csv';
$files[] = $filepath;
$currentFile = $filepath;
$outputFile = fopen($filepath, 'w');
fputcsv($outputFile, $headers);
$rows = 0;
while (!feof($fh)) {
if ($row = $rowPri = fgetcsv($fh))
{
if(filesize($filepath) < 6000000){
fputcsv($outputFile, $row);
} else {
fclose($outputFile);
$rows = 0;
$filepath = 'upload/' . 'L_' . $AccountId . '_' . date('YmdHis') . '.csv';
$files[] = $filepath;
$currentFile = $filepath;
$outputFile = fopen($filepath, 'w');
fputcsv($outputFile, $headers);
fputcsv($outputFile, $row);
}
$rows++;
}
}
fclose($outputFile);
fclose($fh);
return $files;
}
$file='upload/L_10001_20200916183801.csv';
$files=SplitCSVBySize($file,10001);
函数SplitCSVBySize($Existingfiles,$AccountId,$splitSize=”“){
$fh=fopen($Existingfiles,'r');
$headers=fgetcsv($fh);
$files=array();
$filepath='upload/'。'L'.$AccountId'.'.'.date('YmdHis')..csv';
$files[]=$filepath;
$currentFile=$filepath;
$outputFile=fopen($filepath,'w');
fputcsv($outputFile,$headers);
$rows=0;
而(!feof($fh)){
如果($row=$rowPri=fgetcsv($fh))
{
如果(文件大小($filepath)<6000000){
fputcsv($outputFile,$row);
}否则{
fclose($outputFile);
$rows=0;
$filepath='upload/'。'L'.$AccountId'.'.'.date('YmdHis')..csv';
$files[]=$filepath;
$currentFile=$filepath;
$outputFile=fopen($filepath,'w');
fputcsv($outputFile,$headers);
fputcsv($outputFile,$row);
}
$rows++;
}
}
fclose($outputFile);
fclose($fh);
返回$files;
}
这里的挑战是我无法检查文件大小,因为它总是返回和第一次检查时相同的大小。请在此帮助,有什么问题或任何建议。首先。函数(以及所有其他派生函数)被缓存。这意味着,一旦调用某个文件,其结果对于同一个文件将保持不变 您需要在调用此函数之前调用,以清除缓存 秒。您不需要调用
filesize
来获取打开文件的大小。
您可以调用打开的文件句柄并使用返回数组的'size'
项。例如:
...
$st = filestat($outputFile);
if($st['size'] < 6000000){
...
谢谢,伙计,它像冠军一样工作。这是我一直在寻找的解决方案。
...
if (ftell($outputFile) < 6000000) {
...