我现在正在解析一个 csv 文件(生成为 .txt),但该文件未压缩时大约有 350mb。压缩后,它在 zip 文件中显示为 23mb。当我尝试解析 350mb 的文件时,我的系统完全死机了。我将这些行存储在这样的数组中。第一行是标题。
$fh = fopen($inputFile, 'r');
$contents = fread($fh, filesize($inputFile)); // 5KB
fclose($fh);
//$contents = str_replace('"','',$contents);
$fileLines = explode("\n", $contents); // explode to make sure we are only using the first line.
然后我遍历每一行,将其循环插入到 mySQL 中。由于该文件大约有 350mb,是否有一种方法可以从 .zip 文件中解析它,例如 .zip_filename.txt 或者这甚至会有所不同吗?
文件太大,无法通过import方式直接插入到mysql中。
最佳答案
使用内置函数 fgetcsv :
<?php
$row = 1;
if (($handle = fopen($inputFile, "r")) !== FALSE) {
while (($data = fgetcsv($handle, 1000, ",")) !== FALSE) {
$num = count($data);
echo "<p> $num fields in line $row: <br /></p>\n";
$row++;
for ($c=0; $c < $num; $c++) {
echo $data[$c] . "<br />\n";
}
}
fclose($handle);
}
?>
如果可能,也使用多插入。而不是运行多个查询:
insert into table (col1, col2) values("row1-col1", "row1-col2");
insert into table (col1, col2) values("row2-col1", "row2-col2");
像这样构建一个查询要快得多:
insert into table (col1, col2)
values ("row1-col1", "row1-col2"),
("row2-col1", "row2-col2");
对了,你也可以load a file directly into mysql :
load data local infile 'file.csv' into table table_name fields terminated by ','
enclosed by '"'
lines terminated by '\n'
(col1, col2)
关于php - 如何处理大型 CSV 文件以插入到 mysql 中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13553875/