Чтение большого файла CSV в PHP, не могу прочитать весь файл - PullRequest
1 голос
/ 27 января 2012

, поэтому я пытаюсь использовать PHP, чтобы прочитать большой CSV-файл (около 64 000 записей) и сложить его в большой массив

Используя fopen() и fgetcsv, мне удалось получить большинствочтения файла, хотя он внезапно останавливается на записи 51829 без видимой причины

Я проверил в своем массиве и в CSV, и данные были импортированы правильно, строки 51829 в CSV и в массиве совпадаюти т.д ...

кто-нибудь из вас понял, почему я не могу прочитать весь файл?

Вот мой код ^^ Заранее спасибо

$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 ]

1 голос
/ 27 января 2012

Вы исчерпываете всю память, доступную PHP.Файл большого размера не помещается в память, особенно в PHP, где хранится много дополнительных данных с каждой созданной переменной.

Вы должны прочитать ограниченное количество строк, скажем, 100 или около того, затем обработать прочитанные строки и отбросить их.Затем прочитайте следующие 100 строк или около того и повторяйте процесс, пока не обработаете весь файл.

1 голос
/ 27 января 2012

Я думаю, что у Fopen есть ограничения на чтение файлов. Попробуйте использовать file_get_contents ();

1 голос
/ 27 января 2012

Возможно, вашему сценарию не хватает памяти. Проверьте свои журналы ошибок или включите отчеты об ошибках, чтобы подтвердить. Чтобы заставить ваш скрипт работать, вы можете попробовать увеличить memory_limit, что можно сделать либо в php.ini, либо используя ini_set(). Но гораздо лучшим подходом было бы вовсе не хранить данные CSV в массиве, а обрабатывать каждую строку по мере ее чтения. Это поддерживает низкий объем памяти и устраняет необходимость увеличения memory_limit.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...