Fputcsv: примеры (PHP)
Примеры и применение функции fputcsv для работы с CSV
Раздел: Работа с файлами
fputcsv(resource $stream, array $fields, string $separator = ",", string $enclosure = '"', string $escape_char = "\\", string $eol = "\n"): int|falseОписание функции fputcsv
Функция fputcsv() форматирует массив данных как строку в формате CSV и записывает её в указанный файловый указатель. Она применяется для экспорта данных в структурированный текстовый формат, удобный для обмена между приложениями.
Функция принимает следующие аргументы:
- handle (обязательный): Файловый указатель, полученный с помощью
fopen(). Указатель должен быть доступен для записи. - fields (обязательный): Индексированный массив значений, которые требуется записать.
- delimiter (необязательный): Односимвольный разделитель полей. По умолчанию запятая (
,). - enclosure (необязательный): Односимвольный символ ограничителя поля. По умолчанию двойные кавычки (
"). - escape_char (необязательный): Односимвольный символ экранирования. По умолчанию обратный слеш (
\). Влияет на обработку символов внутри enclosure.
Возвращаемое значение: целое число с длиной записанной строки в байтах или false при ошибке.
Краткие примеры использования
Запись простого массива
$file = fopen('data.csv', 'w');
$data = ['Иван', 'Петров', 28];
$result = fputcsv($file, $data);
fclose($file);
echo "Записано байт: $result";Записано байт: 24
Использование пользовательского разделителя и ограничителя
$file = fopen('data.csv', 'w');
$data = ['Яблоко', 'Красное', 'Сладкое'];
$result = fputcsv($file, $data, ';', "'");
fclose($file);
echo "Строка: '" . file_get_contents('data.csv') . "'";Строка: 'Яблоко;Красное;Сладкое'
Экранирование специальных символов
$file = fopen('data.csv', 'w');
$data = ['Текст с "кавычками"', 'Другой текст'];
$result = fputcsv($file, $data, ',', '"', '/');
fclose($file);
echo "Строка: " . file_get_contents('data.csv');Строка: "Текст с /"кавычками/"","Другой текст"
Похожие функции в PHP
- fgetcsv(): Читает строку из файла и парсит её как поля CSV. Используется для импорта данных.
- str_getcsv(): Анализирует строку CSV и возвращает массив данных. Удобна при работе с уже полученными строками, не требуя файлового указателя.
- SplFileObject: Класс, предоставляющий методы
fputcsv()иfgetcsv()в объектно-ориентированном стиле. Предпочтителен для более сложных операций с файлами. - Функции ручного форматирования: Например, объединение массива через
implode()с экранированием. Используются при необходимости полного контроля над форматом.
Аналоги в других языках
Python: модуль csv
import csv
with open('data.csv', 'w', newline='') as file:
writer = csv.writer(file, delimiter=';', quotechar="'")
writer.writerow(['Иван', 'Петров', 28])JavaScript (Node.js): ручное формирование или библиотеки
const fs = require('fs');
const data = [['Иван', 'Петров', 28]];
const csv = data.map(row => row.map(cell => `"${cell}"`).join(',')).join('\n');
fs.writeFileSync('data.csv', csv);MySQL: SELECT ... INTO OUTFILE
SELECT name, surname, age INTO OUTFILE '/tmp/data.csv'
FIELDS TERMINATED BY ',' ENCLOSED BY '"'
FROM users;Отличия от PHP: Python и JS часто используют библиотеки для автоматического экранирования, а MySQL экспортирует данные напрямую из таблиц.
Типичные ошибки
Передача неверного файлового указателя
$result = fputcsv(false, ['тест']);
var_dump($result);bool(false)
Попытка записи в файл, открытый только для чтения
$file = fopen('data.csv', 'r');
$result = fputcsv($file, ['тест']);
fclose($file);
var_dump($result);bool(false)
Проблемы с кодировкой символов
$file = fopen('data.csv', 'w');
$data = ['Текст с кириллицей'];
fputcsv($file, $data);
fclose($file);
// Если файл открывается в редакторе с неправильной кодировкой, символы могут отображаться некорректно.Изменения в последних версиях PHP
- До PHP 8.1 параметр
escape_charнельзя было задать отдельно отenclosure. Начиная с PHP 8.1,escape_charстал независимым параметром, что позволяет более гибко управлять экранированием. - В PHP 8.0 улучшена обработка ошибок типа для аргументов функции.
Расширенные примеры
Запись массива массивов (таблицы данных)
Пример php
$file = fopen('users.csv', 'w');
$rows = [
['Имя', 'Фамилия', 'Возраст'],
['Анна', 'Иванова', 25],
['Петр', 'Сидоров', 32]
];
$bytes = 0;
foreach ($rows as $row) {
$bytes += fputcsv($file, $row);
}
fclose($file);
echo "Всего записано байт: $bytes";Использование потока вывода (stdout)
Пример php
$data = ['Данные', 'для', 'терминала'];
$result = fputcsv(STDOUT, $data);"Данные","для","терминала"
Работа с нестандартным символом экранирования
Пример php
$file = fopen('data.csv', 'w');
$data = ['Текст "в кавычках"', 'Еще "текст"'];
// Используем символ | для экранирования кавычек внутри поля
fputcsv($file, $data, ',', '"', '|');
fclose($file);
echo file_get_contents('data.csv');"Текст |"в кавычках|"","Еще |"текст|""
Обработка числовых форматов и локалей
Пример php
setlocale(LC_ALL, 'ru_RU.UTF-8');
$file = fopen('data.csv', 'w');
$data = [1234.56, 'текст'];
fputcsv($file, $data);
fclose($file);
// Разделитель дробной части зависит от локали, но в CSV обычно используется точка.PHP fputcsv function comments
En
Fputcsv Format line as CSV and write to file pointer