Files
php-doc-ru/reference/filesystem/functions/fgetcsv.xml
Mikhail Alferov e46c56fddf Update fgetcsv.xml
2024-06-04 00:14:48 +03:00

217 lines
8.5 KiB
XML
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<?xml version="1.0" encoding="utf-8"?>
<!-- EN-Revision: 61374bbe228e8e9c55a24aba59a1e2bb2a871148 Maintainer: shein Status: ready -->
<!-- Reviewed: no -->
<refentry xml:id="function.fgetcsv" xmlns="http://docbook.org/ns/docbook">
<refnamediv>
<refname>fgetcsv</refname>
<refpurpose>Получает строку из указателя файла и разбирает поля CSV-файла</refpurpose>
</refnamediv>
<refsect1 role="description">
&reftitle.description;
<methodsynopsis>
<type class="union"><type>array</type><type>false</type></type><methodname>fgetcsv</methodname>
<methodparam><type>resource</type><parameter>stream</parameter></methodparam>
<methodparam choice="opt"><type class="union"><type>int</type><type>null</type></type><parameter>length</parameter><initializer>&null;</initializer></methodparam>
<methodparam choice="opt"><type>string</type><parameter>separator</parameter><initializer>","</initializer></methodparam>
<methodparam choice="opt"><type>string</type><parameter>enclosure</parameter><initializer>"\""</initializer></methodparam>
<methodparam choice="opt"><type>string</type><parameter>escape</parameter><initializer>"\\"</initializer></methodparam>
</methodsynopsis>
<para>
Функция похожа на функцию <function>fgets</function>, за исключением того,
что функция <function>fgetcsv</function> анализирует строку на наличие полей
в формате <acronym>CSV</acronym> и возвращает массив с прочитанными полями.
</para>
<note>
<para>
Функция учитывает настройки локали. Если значение константы
<constant>LC_CTYPE</constant> равно, например, <literal>en_US.UTF-8</literal>,
функция может неправильно прочитать файлы в однобайтовой кодировке.
</para>
</note>
</refsect1>
<refsect1 role="parameters">
&reftitle.parameters;
<para>
<variablelist>
<varlistentry>
<term><parameter>stream</parameter></term>
<listitem>
<para>
Корректный указатель на файл, который успешно открыли функции
<function>fopen</function>, <function>popen</function>
или <function>fsockopen</function>.
</para>
</listitem>
</varlistentry>
<varlistentry>
<term><parameter>length</parameter></term>
<listitem>
<para>
Значение параметра устанавливают больше самой длинной строки (в символах), которую функция нашла в CSV-файле
(включая завершающий символ конца строки). Иначе функция разобьёт
строку на части длиной в <parameter>length</parameter> символов,
если только место разделение не появится внутри ограничителя полей.
</para>
<para>
Если этот параметр опустили (или начиная с PHP 8.0.0 установили для параметра значение 0 или &null;),
функция не будет ограничивать максимальную длину строки, что немного медленнее.
</para>
</listitem>
</varlistentry>
<varlistentry>
<term><parameter>separator</parameter></term>
<listitem>
<para>
Необязательный параметр <parameter>separator</parameter> устанавливает
разделитель полей (только один однобайтовый символ).
</para>
</listitem>
</varlistentry>
<varlistentry>
<term><parameter>enclosure</parameter></term>
<listitem>
<para>
Необязательный параметр <parameter>enclosure</parameter> устанавливает
символ ограничителя поля (только один однобайтовый символ).
</para>
</listitem>
</varlistentry>
<varlistentry>
<term><parameter>escape</parameter></term>
<listitem>
<para>
Необязательный параметр <parameter>escape</parameter> устанавливает
символ экранирования (не более одного однобайтового символа).
Пустая строка (<literal>""</literal>) отключает внутренний механизм экранирования.
</para>
<note>
<simpara>
Обычно символ ограничителя <parameter>enclosure</parameter> экранируется внутри поля путём удвоения;
однако, разрешается указывать символ экранирования <parameter>escape</parameter> как альтернативу.
Поэтому значения по умолчанию этих параметров <literal>""</literal> и <literal>\"</literal>
имеют одинаковое значение. Кроме разрешения экранировать символ ограничителя
<parameter>enclosure</parameter> символ экранирования
<parameter>escape</parameter> не имеет особого смысла; он даже не предназначен для самого экранирования.
</simpara>
</note>
</listitem>
</varlistentry>
</variablelist>
</para>
</refsect1>
<refsect1 role="returnvalues">
&reftitle.returnvalues;
<para>
В случае успешного выполнения функция возвращает индексный массив с полями, которые прочитала функция,&return.falseforfailure;.
</para>
<note>
<para>
Функция возвращает пустую строку CSV-файла как массив,
который содержит единственный элемент <type>null</type>, ошибки
в этом случае не возникнет.
</para>
</note>
&note.line-endings;
</refsect1>
<refsect1 role="changelog">
&reftitle.changelog;
<para>
<informaltable>
<tgroup cols="2">
<thead>
<row>
<entry>&Version;</entry>
<entry>&Description;</entry>
</row>
</thead>
<tbody>
<row>
<entry>8.0.0</entry>
<entry>
Теперь параметр <parameter>length</parameter> принимает значение &null;.
</entry>
</row>
<row>
<entry>7.4.0</entry>
<entry>
Теперь параметр <parameter>escape</parameter> умеет принимать пустую строку для
отключения встроенного механизма экранирования.
</entry>
</row>
</tbody>
</tgroup>
</informaltable>
</para>
</refsect1>
<refsect1 role="examples">
&reftitle.examples;
<para>
<example>
<title>Пример чтения и вывода на экран содержимого CSV-файла</title>
<programlisting role="php">
<![CDATA[
<?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);
}
?>
]]>
</programlisting>
</example>
</para>
</refsect1>
<refsect1 role="seealso">
&reftitle.seealso;
<para>
<simplelist>
<member><function>str_getcsv</function></member>
<member><function>explode</function></member>
<member><function>file</function></member>
<member><function>pack</function></member>
<member><function>fputcsv</function></member>
</simplelist>
</para>
</refsect1>
</refentry>
<!-- Keep this comment at the end of the file
Local variables:
mode: sgml
sgml-omittag:t
sgml-shorttag:t
sgml-minimize-attributes:nil
sgml-always-quote-attributes:t
sgml-indent-step:1
sgml-indent-data:t
indent-tabs-mode:nil
sgml-parent-document:nil
sgml-default-dtd-file:"~/.phpdoc/manual.ced"
sgml-exposed-tags:nil
sgml-local-catalogs:nil
sgml-local-ecat-files:nil
End:
vim600: syn=xml fen fdm=syntax fdl=2 si
vim: et tw=78 syn=sgml
vi: ts=1 sw=1
-->