所以我试图用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);
答案 0 :(得分:1)
您的脚本可能内存不足。检查错误日志或打开错误报告以确认。要使您的脚本正常工作,您可以尝试增加memory_limit
,这可以在php.ini
或ini_set()
中完成。但是更好的方法是根本不将csv数据存储在数组中,而是在读取时处理每一行。这样可以减少内存占用,并减少增加memory_limit
的需要。
答案 1 :(得分:1)
你正在耗尽PHP可用的所有内存。一个大文件无法容纳到内存中的文件,特别是在PHP中,它不会在创建的每个变量中存储大量附加数据。
你应该阅读有限数量的行,比如100左右,然后处理你读过的行并丢弃它们。然后阅读接下来的100行左右并重复该过程,直到您处理完整个文件。
答案 2 :(得分:1)
我认为Fopen对阅读文件有限制。尝试使用file_get_contents();