(PHP 4, PHP 5, PHP 7, PHP 8)
fwrite — Бинарно-безопасная запись в файл
$stream
, string $data
, ?int $length
= null
): int|false
fwrite() записывает содержимое data
в файловый поток stream
.
stream
Указатель (resource) на файл, обычно создаваемый с помощью функции fopen().
data
Записываемая строка.
length
Если параметр length
является целым числом (int), запись
остановится после того, как length
байтов будут записаны или будет достигнут конец строки
data
, смотря что произойдёт раньше.
fwrite() возвращает количество записанных байт или false
в случае возникновения ошибки.
Функция fwrite() выдаёт ошибку уровня E_WARNING
в случае возникновения ошибки.
Версия | Описание |
---|---|
8.0.0 |
Параметр length теперь допускает значение null .
|
Пример #1 Простой пример использования fwrite()
<?php
$filename = 'test.txt';
$somecontent = "Добавить это к файлу\n";
// Вначале давайте убедимся, что файл существует и доступен для записи.
if (is_writable($filename)) {
// В нашем примере мы открываем $filename в режиме "записи в конец".
// Таким образом, смещение установлено в конец файла и
// наш $somecontent допишется в конец при использовании fwrite().
if (!$fp = fopen($filename, 'a')) {
echo "Не могу открыть файл ($filename)";
exit;
}
// Записываем $somecontent в наш открытый файл.
if (fwrite($fp, $somecontent) === FALSE) {
echo "Не могу произвести запись в файл ($filename)";
exit;
}
echo "Ура! Записали ($somecontent) в файл ($filename)";
fclose($fp);
} else {
echo "Файл $filename недоступен для записи";
}
?>
Замечание:
Запись в сетевой поток может прекратиться до того, как будут записаны все данные. Это можно контролировать с помощью проверки возвращаемого значения функции fwrite():
<?php
function fwrite_stream($fp, $string) {
for ($written = 0; $written < strlen($string); $written += $fwrite) {
$fwrite = fwrite($fp, substr($string, $written));
if ($fwrite === false) {
return $written;
}
}
return $written;
}
?>
Замечание:
В системах, различающих двоичные и текстовые файлы (к примеру, Windows), файл должен быть открыт используя флаг 'b' в конце аргумента mode функции fopen().
Замечание:
Если дескриптор
stream
был открыт функцией fopen() в режиме "добавление в конец", то вызовы fwrite() будут атомарными (за исключением случая, если размерdata
превысит размер блока файловой системы, на некоторых платформах, и пока файл хранится на локальной файловой системе). То есть нет необходимости блокировать ресурс с помощью flock() перед вызовом fwrite(), и все данные будут записаны без прерываний.
Замечание:
При повторной записи в файловый указатель, данные будут добавлены в конец содержимого файла:
<?php
$fp = fopen('data.txt', 'w');
fwrite($fp, '1');
fwrite($fp, '23');
fclose($fp);
// содержимое 'data.txt' теперь 123, а не 23!
?>