Fwrite: примеры (PHP)

Использование fwrite для записи файлов в PHP
Раздел: Работа с файлами
fwrite(resource $stream, string $data, ?int $length = null): int|false

Функция fwrite в PHP

Функция fwrite применяется для записи данных в файл, открытый с помощью fopen(). Она часто используется в задачах логирования, создания конфигурационных файлов, генерации статических страниц или записи любых текстовых или бинарных данных.

Аргументы функции

Функция принимает три параметра:

  1. $stream – обязательный. Указатель на файловый ресурс, полученный от fopen() или fsockopen().
  2. $data – обязательный. Строка с данными для записи в файл.
  3. $length – необязательный. Максимальное количество байт для записи. Если передан, запись остановится после записи указанного количества байт или конца строки.

Функция возвращает количество записанных байт или false в случае ошибки.

Простые примеры использования fwrite

Запись строки в файл

Базовый пример открытия файла для записи.

$file = fopen('example.txt', 'w');
$bytes = fwrite($file, 'Привет, мир!');
fclose($file);
echo "Записано байт: $bytes";
Записано байт: 21
Запись с ограничением длины

Использование третьего параметра.

$file = fopen('test.txt', 'w');
$bytes = fwrite($file, 'Это длинная строка', 8);
fclose($file);
echo "Записано: $bytes";
echo file_get_contents('test.txt');
Записано: 8
Это длин
Запись в файл с флагом 'a' (добавление)
$file = fopen('log.txt', 'a');
fwrite($file, "Новая запись\n");
fclose($file);
// При каждом запуске в конец файла добавляется строка.

Похожие функции в PHP

В PHP существуют альтернативные функции для записи в файлы, каждая со своими особенностями.

Записывает данные в файл без явного открытия и закрытия файла. Удобна для простых операций.

file_put_contents('file.txt', 'Данные', FILE_APPEND | LOCK_EX);

Псевдоним fwrite(), полностью идентична. Используется по историческим причинам.

stream_socket_sendto()

Используется для отправки данных через сетевые сокеты, предоставляет более низкоуровневый контроль.

Аналоги в других языках

Fwrite в Python

Функция write() для работы с файловыми объектами. Отличается автоматическим управлением кодировкой в текстовом режиме.

with open('file.txt', 'w', encoding='utf-8') as f:
f.write('Пример строки')
JavaScript (Node.js)

Метод writeFile() из модуля fs. Работа асинхронная по умолчанию.

const fs = require('fs');
fs.writeFile('file.txt', 'Данные', 'utf8', (err) => {});

Fwrite в MySQL

Инструкция SELECT ... INTO OUTFILE записывает результаты запроса прямо в файл на сервере.

SELECT * FROM users INTO OUTFILE '/tmp/users.csv';

Типичные ошибки

Попытка записи в закрытый ресурс
$file = fopen('test.txt', 'w');
fclose($file);
$result = fwrite($file, 'текст'); // Warning: fwrite(): supplied resource is not a valid stream resource
var_dump($result);
bool(false)
Отсутствие прав на запись
// Если файловая система запрещает запись
$file = @fopen('/system/file.txt', 'w');
if ($file === false) {
echo "Не удалось открыть файл";
}
Забытое закрытие файла при длительной работе

Это может привести к утечке ресурсов и блокировке файла для других процессов.

Изменения в последних версиях PHP

В PHP 8.0 и 8.1 существенных изменений в поведении fwrite не было. Основные изменения касались внутреннего представления ресурсов и типизации. В PHP 8.2 улучшены сообщения об ошибках при работе с некорректными ресурсами. Важно отметить, что начиная с PHP 8.0, некоторые предупреждения были преобразованы в исключения TypeError при передаче аргументов неверного типа.

Расширенные примеры

Запись бинарных данных
Пример php
$file = fopen('image.jpg', 'wb');
$binaryData = file_get_contents('https://example.com/sample.jpg');
$bytes = fwrite($file, $binaryData);
fclose($file);
echo "Записано байт изображения: $bytes";
Построчная запись большого массива
Пример php
$lines = range(1, 10000);
$file = fopen('big_file.txt', 'w');
foreach ($lines as $line) {
fwrite($file, "Строка $line\n");
}
fclose($file);
echo "Файл создан";
Использование с stream_context_create

Запись в удаленный файл через HTTP-поток.

Пример php
$context = stream_context_create(['http' => ['method' => 'POST', 'header' => 'Content-Type: text/plain']]);
$stream = fopen('http://example.com/upload.php', 'r', false, $context);
if ($stream) {
fwrite($stream, 'Отправляемые данные');
$response = stream_get_contents($stream);
fclose($stream);
echo $response;
}
Безопасная запись с блокировкой файла
Пример php
$file = fopen('data.txt', 'c+');
if (flock($file, LOCK_EX)) {
fwrite($file, "Критическая запись\n");
flock($file, LOCK_UN);
}
fclose($file);

PHP fwrite function comments

En
Fwrite Binary-safe file write