为啥使用 php 从一个非常大的 csv 文件中只读取 1000 条记录?
Posted
技术标签:
【中文标题】为啥使用 php 从一个非常大的 csv 文件中只读取 1000 条记录?【英文标题】:why only 1000 records are read from a very large csv file using php?为什么使用 php 从一个非常大的 csv 文件中只读取 1000 条记录? 【发布时间】:2015-08-08 22:20:14 【问题描述】:我只是在学习使用 php,因为我的工作提出了要求,我试图弄清楚为什么在我的 CSV 文件中的 124938 条记录中只有 1011 条记录被读取。这是我正在使用的非常基本的代码。
<?php
print "<table>\n";
$fp = fopen('STDPRICE_FULL.csv','r') or die("can't open file");
while($csv_line = fgetcsv($fp,1024))
print '<tr>';
for ($i = 0, $j = count($csv_line); $i < $j; $i++)
print '<td>'.$csv_line[$i].'</td>';
print "</tr>\n";
print '</table>\n';
fclose($fp) or die("can't close file");
?>
当我打印 count($csv_line) 时,它只显示 1011 条记录。 现在我相信它可能与整数的大小有关,但我不确定。 另外,我搜索了增加整数大小的方法,但 PHP 似乎可以自己处理类型转换。 谁能建议我可以做些什么来读取 CSV 文件中的所有行?
【问题讨论】:
这可能是某种内存问题,因为这些记录很多。你的 php 内存限制和脚本执行时间是多少?$j = count($csv_line);
--- 这是什么?比如,你为什么认为它是许多行/记录?
将 fgetcsv($fp,1024)
更改为 fgetcsv($fp)
。通常,您不想设置第二个参数,除非您的文件中有常规的、预期的(最大)宽度行
我的 php.ini 文件有以下 max_input_vars = 6000 max_execution_time = 5000 memory_limit = 256M
好吧,“更简单”的做法是将最后一项输出与文件中的最后一项进行比较。它们匹配吗? Photoshop Extended ALL IE ALL 300 000 plus Gold 2Y 24 Months PRO
这是我在您的页面上最后关闭 </td></tr></table>
之前看到的最后一件事。这是你文件中的最后一件事吗?
【参考方案1】:
使用http://dev.mysql.com/doc/refman/5.1/en/load-data.html。
然后使用数据库。
【讨论】:
【参考方案2】:使用 ParseCSV 类。我们已经成功地用于处理非常大的文件。
ParseCSV Class at GitHub
它处理了我们在 PHP 中处理 CSV 文件时遇到的许多问题。
【讨论】:
以上是关于为啥使用 php 从一个非常大的 csv 文件中只读取 1000 条记录?的主要内容,如果未能解决你的问题,请参考以下文章