在php中读取一个大的csv文件,无法读取所有文件

时间:2012-01-26 21:21:46

标签: php codeigniter csv

所以我试图用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);

3 个答案:

答案 0 :(得分:1)

您的脚本可能内存不足。检查错误日志或打开错误报告以确认。要使您的脚本正常工作,您可以尝试增加memory_limit,这可以在php.iniini_set()中完成。但是更好的方法是根本不将csv数据存储在数组中,而是在读取时处理每一行。这样可以减少内存占用,并减少增加memory_limit的需要。

答案 1 :(得分:1)

你正在耗尽PHP可用的所有内存。一个大文件无法容纳到内存中的文件,特别是在PHP中,它不会在创建的每个变量中存储大量附加数据。

你应该阅读有限数量的行,比如100左右,然后处理你读过的行并丢弃它们。然后阅读接下来的100行左右并重复该过程,直到您处理完整个文件。

答案 2 :(得分:1)

我认为Fopen对阅读文件有限制。尝试使用file_get_contents();