所以我尝试使用PHP读取一个大的csv文件(大约64000个条目),并将其堆叠在一个大数组中
使用fopen()
和fgetcsv
,我设法读取了大部分文件,尽管它突然停止在条目51829,没有明显的原因
我检查了我的数组和CSV,数据被正确导入,CSV和数组中的51829行是相同的,等等…
你们中有人知道为什么我不能阅读所有的文件吗?
这是我的代码^^提前感谢
$this->load->model('Import_model', 'import');
$this->import->clear_student_group();
//CHARGER LE CSV
$row = 1;
$data = array();
$file = "Eleve_Groupe_Mat.csv";
$lines = count(file($file));
if ($fp = fopen('Eleve_Groupe_Mat.csv', 'r')) {
$rownumber = 0;
while (!feof($fp)) {
$rownumber++;
$row = fgetcsv($fp);
$datarow = explode(";", $row[0]);
for($i = 0; $i <= 7; $i++) {
$dataset[$rownumber][$i] = $datarow[$i];
}
}
fclose($fp);
}
$this->import->insert_student_group($dataset);
您的脚本可能内存不足。请检查错误日志或打开错误报告进行确认。要使脚本正常工作,可以尝试增加memory_limit
,这可以在php.ini
中完成,也可以使用ini_set()
。但更好的方法是根本不将csv数据存储在数组中,而是在读取每一行时对其进行处理。这可以降低内存占用,并减轻增加memory_limit
的需要。
你正在耗尽PHP可用的所有内存。一个太大的文件无法放入内存,尤其是在PHP中,它在创建每个变量时都会存储大量额外的数据。
你应该读有限数量的行,比如100行左右,然后处理你读过的行并丢弃它们。然后阅读接下来的100行左右,重复这个过程,直到处理完整个文件。
我认为Fopen对读取文件有限制。尝试使用file_get_contents();