(PHP 4, PHP 5, PHP 7, PHP 8)
fgetcsv — Читает строку из файла и производит разбор данных CSV
$stream
,$length
= null
,$separator
= ",",$enclosure
= "\"",$escape
= "\\"Данная функция похожа на функцию fgets(), с той разницей, что она производит анализ строки на наличие записей в формате CSV и возвращает найденные поля в качестве массива.
Замечание:
Функция учитывает настройки локали. Если значение константы
LC_CTYPE
равно, например,en_US.UTF-8
, функция может неправильно прочитать файлы в однобайтовой кодировке.
stream
Корректный файловый указатель на файл, успешно открытый функциями fopen(), popen() или fsockopen().
length
Должен быть больше самой длинной строки (в символах), найденной в CSV-файле (включая завершающий символ конца строки). В противном случае, строка будет разбита на куски длиной в length
символов, если только место разрыва не будет внутри ограничителей полей (enclosure).
Отсутствие этого параметра (или установка его в 0 или null
, начиная с PHP 8.0.0) приведёт к тому, что длина строки будет не ограничена. Это может сказаться на скорости выполнения.
separator
Необязательный параметр separator
устанавливает разделитель поля (только один однобайтовый символ).
enclosure
Необязательный параметр enclosure
устанавливает символ ограничителя поля (только один однобайтовый символ).
escape
Необязательный параметр escape
устанавливает экранирующий символ (не более одного однобайтового символа). Пустая строка (""
) отключает проприетарный механизм экранирования.
Замечание: Обычно символ
enclosure
экранируется внутри поля путём его удваивания; однако, символescape
в качестве альтернативы. Поэтому значения по умолчанию этих параметров""
и\"
имеют одинаковое значение. Помимо разрешения экранировать символenclosure
символescape
не имеет особого смысла; он даже не предназначен для самого экранирования.
Функция возвращает индексированный массив с прочтёнными полями в случае успешного выполнения или false
, если возникла ошибка.
Замечание:
Функция возвращает пустую строку CSV-файла как массив, который содержит единственный элемент null, ошибки в этом случае не возникнет.
Замечание: Если возникают проблемы с распознаванием PHP концов строк при чтении или создании файлов на Macintosh-совместимом компьютере, включение опции auto_detect_line_endings может помочь решить проблему.
Версия | Описание |
---|---|
8.0.0 | Параметр length теперь принимает значение null . |
7.4.0 | Теперь параметр escape умеет принимать пустую строку для отключения проприетарного механизма экранирования. |
Пример #1 Чтение и вывод на экран содержимого CSV-файла
<?php
$row = 1;
if (($handle = fopen("test.csv", "r")) !== FALSE) {
while (($data = fgetcsv($handle, 1000, ",")) !== FALSE) {
$num = count($data);
echo "<p> $num полей в строке $row: <br /></p>\n";
$row++;
for ($c=0; $c < $num; $c++) {
echo $data[$c] . "<br />\n";
}
}
fclose($handle);
}
?>