2012-01-26 138 views
1

,所以我试图用PHP读取CSV文件较大(约64 000项)和堆栈它在一个大阵列阅读PHP中的大csv文件,无法读取

使用中的所有文件fopen()fgetcsv,我设法让大部分文件的读取,虽然它突然在CSV入境51829停止无缘无故

我在阵,并在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

它可能有某种溢出。尝试将你的csv文件分成更小的部分来克服这一点。 – 2012-01-26 21:23:12

+1

不好主意,以块处理。 – 2012-01-26 21:23:29

+0

你在'insert_student_group'里面检查错误吗?如果没有更多的信息,我不认为有人能帮助你。你有没有激活错误报告? –

回答

1

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

1

你正在耗尽PHP可用的所有内存。一个大的文件不能放进内存中,尤其是不在PHP中,它会在创建每个变量时存储大量附加数据。

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

1

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