Fwrite: примеры (PHP)
fwrite(resource $stream, string $data, ?int $length = null): int|falseФункция fwrite в PHP
Функция fwrite применяется для записи данных в файл, открытый с помощью fopen(). Она часто используется в задачах логирования, создания конфигурационных файлов, генерации статических страниц или записи любых текстовых или бинарных данных.
Функция принимает три параметра:
- $stream – обязательный. Указатель на файловый ресурс, полученный от fopen() или fsockopen().
- $data – обязательный. Строка с данными для записи в файл.
- $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
Это длин
$file = fopen('log.txt', 'a');
fwrite($file, "Новая запись\n");
fclose($file);
// При каждом запуске в конец файла добавляется строка.Похожие функции в PHP
В PHP существуют альтернативные функции для записи в файлы, каждая со своими особенностями.
Записывает данные в файл без явного открытия и закрытия файла. Удобна для простых операций.
file_put_contents('file.txt', 'Данные', FILE_APPEND | LOCK_EX);Псевдоним fwrite(), полностью идентична. Используется по историческим причинам.
Используется для отправки данных через сетевые сокеты, предоставляет более низкоуровневый контроль.
Аналоги в других языках
Fwrite в Python
Функция write() для работы с файловыми объектами. Отличается автоматическим управлением кодировкой в текстовом режиме.
with open('file.txt', 'w', encoding='utf-8') as f:
f.write('Пример строки')Метод 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 при передаче аргументов неверного типа.
Расширенные примеры
$file = fopen('image.jpg', 'wb');
$binaryData = file_get_contents('https://example.com/sample.jpg');
$bytes = fwrite($file, $binaryData);
fclose($file);
echo "Записано байт изображения: $bytes";$lines = range(1, 10000);
$file = fopen('big_file.txt', 'w');
foreach ($lines as $line) {
fwrite($file, "Строка $line\n");
}
fclose($file);
echo "Файл создан";Запись в удаленный файл через HTTP-поток.
$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;
}$file = fopen('data.txt', 'c+');
if (flock($file, LOCK_EX)) {
fwrite($file, "Критическая запись\n");
flock($file, LOCK_UN);
}
fclose($file);