У меня очень любопытная проблема с fgtcsv (). Посмотрите на этот код
$csv_check = fopen(CSV_DIR.$this->db_table.".csv","r");
$data = fgetcsv($csv_check, 1000, $this->fields_terminated_by);
fclose($csv_check);
Print_r ($ data) выводит следующее:
array (
0 => '"program_id"',
1 => 'program_name',
2 => 'program_logo',
)
Любопытно, что $ data [0] здесь заключена в двойные кавычки … Исходная строка в этом CSV-файле выглядит следующим образом:
"program_id";"program_name";"program_logo"
Я совсем не понимаю … Подсчет символов $ data [0] с помощью strlen ($ data [0]) возвращает 15, даже если они указаны неверно, это должно быть 12 символов … Я очень ошеломлен …!
Есть идеи?!?
Я знаю, что это старая тема, но как кто-то может прийти, как я, и попытаться найти решение, вот как это исправить.
Откройте блокнот (в моем случае я использовал notepad ++) и создайте новый файл.
Скопируйте / вставьте все данные в новый файл.
Сохраните его как «All type» и добавьте «.csv» самостоятельно.
Файл должен быть сохранен без спецификации, и вы можете обработать чтение CSV-файла с помощью PHP.
От Заметки PHP.net:
Когда символ спецификации предоставлен,
fgetscsv
может появиться, чтобы обернуть первый элемент в «двойные кавычки». Самый простой способ игнорировать это — перед тем как использовать указатель файла на 4-й байт.fgetcsv
,
<?php
// BOM as a string for comparison.
$bom = "\xef\xbb\xbf";
// Read file from beginning.
$fp = fopen($path, 'r');
// Progress file pointer and get first 3 characters to compare to the BOM string.
if (fgets($fp, 4) !== $bom) {
// BOM not found - rewind pointer to start of file.
rewind($fp);
}
// Read CSV into an array.
$lines = [];
while (!feof($fp) && ($line = fgetcsv($fp)) !== false) {
$lines[] = $line;
}