在php中读取一个大的csv文件,可以';I don’我没有读完所有的文件


Reading a big csv file in php, can't read all the file

所以我尝试使用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();