2015-05-27 2 views
3

Использование fgetcsv - это опция, которую я нашел для чтения файлов csv, которые требуется системе. Но кажется, что это не работает каждый раз (на самом деле это очень редко, когда этот код работает).fgetcsv выводит все данные в первой строке

if (($handle = fopen($file, 'r')) !== FALSE) { 
    set_time_limit(0); // necessary if a large csv file 

    $row = 0; 
    while (($data = fgetcsv($handle, 0, ',')) !== FALSE) { 
     print_r($data); 
     // .. here I do some stuff with the data 
     // .. The result should be an array with 5 columns and it run multiple times (for the amount of lines in the file) 
     // .. The result however is one array with a over 9000 columns (really over 9000, it's 9489 in the file that I'm testing) 
    } 
    fclose($handle); 
    die(); 
} 

Я попытался проверить конец строки, позвонив перед кодом, без особого успеха.

ini_set('auto_detect_line_endings', true); 

Файл экспортируется другой программой клиентом, и я не могу это «обновляется», чтобы соответствовать потребности в программном обеспечении. Есть ли способ справиться с этой проблемой encoding/line-ending на csv?

+2

вы смотрели на сырье файл, чтобы увидеть, что там? возможно, он был сгенерирован без окончаний строки или полностью нестандартного символа конца записи. –

ответ

0

С (радикальной идеи я знаю) PHP Manual

параметр длины

Должно быть больше самой длинной строки (в символах) можно найти в файле CSV (с учетом задней конца строки персонажи). Он стал необязательным в PHP 5. Опуская этот параметр (или установив его в 0 в PHP 5.1.0 и более поздних), максимальная длина линии не ограничена, что немного медленнее.

Я не знаю, какую версию PHP вы используете, но попробуйте установить параметр на что-то разумное, и вы должны начать получать по одной строке за раз.

Например

while (($data = fgetcsv($handle, 4096, ',')) !== FALSE) {