Files
php-doc-ru/reference/filesystem/functions/fwrite.xml
Sergey Panteleev 300ffa98fb Исправление форматирования (#362)
[skip-spellcheck]
[skip-lint]
2021-10-21 09:47:52 +03:00

206 lines
6.8 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: 9d2b858bca85edbeebb83f05a1cd2e87cf90127d Maintainer: shein Status: ready -->
<!-- Reviewed: yes -->
<refentry xmlns="http://docbook.org/ns/docbook" xml:id="function.fwrite">
<refnamediv>
<refname>fwrite</refname>
<refpurpose>Бинарно-безопасная запись в файл</refpurpose>
</refnamediv>
<refsect1 role="description">
&reftitle.description;
<methodsynopsis>
<type>int</type><methodname>fwrite</methodname>
<methodparam><type>resource</type><parameter>handle</parameter></methodparam>
<methodparam><type>string</type><parameter>string</parameter></methodparam>
<methodparam choice="opt"><type>int</type><parameter>length</parameter></methodparam>
</methodsynopsis>
<simpara>
<function>fwrite</function> записывает содержимое <parameter>string</parameter>
в файловый поток <parameter>handle</parameter>.
</simpara>
</refsect1>
<refsect1 role="parameters">
&reftitle.parameters;
<para>
<variablelist>
<varlistentry>
<term><parameter>handle</parameter></term>
<listitem>
&fs.file.pointer;
</listitem>
</varlistentry>
<varlistentry>
<term><parameter>string</parameter></term>
<listitem>
<para>
Записываемая строка.
</para>
</listitem>
</varlistentry>
<varlistentry>
<term><parameter>length</parameter></term>
<listitem>
<para>
Если передан аргумент <parameter>length</parameter>, запись
остановится после того, как <parameter>length</parameter>
байтов будут записаны или будет достигнут конец строки
<parameter>string</parameter>, смотря что произойдёт раньше.
</para>
</listitem>
</varlistentry>
</variablelist>
</para>
</refsect1>
<refsect1 role="returnvalues">
&reftitle.returnvalues;
<simpara>
<function>fwrite</function> возвращает количество записанных байт
или &false; в случае возникновения ошибки.
</simpara>
</refsect1>
<refsect1 role="examples">
&reftitle.examples;
<para>
<example>
<title>Простой пример использования <function>fwrite</function></title>
<programlisting role="php">
<![CDATA[
<?php
$filename = 'test.txt';
$somecontent = "Добавить это к файлу\n";
// Вначале давайте убедимся, что файл существует и доступен для записи.
if (is_writable($filename)) {
// В нашем примере мы открываем $filename в режиме "записи в конец".
// Таким образом, смещение установлено в конец файла и
// наш $somecontent допишется в конец при использовании fwrite().
if (!$handle = fopen($filename, 'a')) {
echo "Не могу открыть файл ($filename)";
exit;
}
// Записываем $somecontent в наш открытый файл.
if (fwrite($handle, $somecontent) === FALSE) {
echo "Не могу произвести запись в файл ($filename)";
exit;
}
echo "Ура! Записали ($somecontent) в файл ($filename)";
fclose($handle);
} else {
echo "Файл $filename недоступен для записи";
}
?>
]]>
</programlisting>
</example>
</para>
</refsect1>
<refsect1 role="notes">
&reftitle.notes;
<note>
<para>
Запись в сетевой поток может прекратиться до того, как будут
записаны все данные. Это можно контролировать с помощью проверки
возвращаемого значения функции <function>fwrite</function>:
<programlisting role="php">
<![CDATA[
<?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;
}
?>
]]>
</programlisting>
</para>
</note>
<note>
<para>
В системах, различающих двоичные и текстовые файлы (к примеру,
Windows), файл должен быть открыт используя флаг 'b' в конце
аргумента mode функции <function>fopen</function>.
</para>
</note>
<note>
<para>
Если дескриптор <parameter>handle</parameter> был открыт функцией
<function>fopen</function> в режиме "добавление в конец", то вызовы
<function>fwrite</function> будут атомарными (за исключением
случая, если размер <parameter>string</parameter> превысит размер
блока файловой системы, на некоторых платформах, и пока файл хранится
на локальной файловой системе). То есть нет необходимости блокировать ресурс
с помощью <function>flock</function> перед вызовом <function>fwrite</function>,
и все данные будут записаны без прерываний.
</para>
</note>
<note>
<para>
При повторной записи в файловый указатель, данные будут добавлены
в конец содержимого файла:
<programlisting role="php">
<![CDATA[
<?php
$fp = fopen('data.txt', 'w');
fwrite($fp, '1');
fwrite($fp, '23');
fclose($fp);
// содержимое 'data.txt' теперь 123, а не 23!
?>
]]>
</programlisting>
</para>
</note>
</refsect1>
<refsect1 role="seealso">
&reftitle.seealso;
<para>
<simplelist>
<member><function>fread</function></member>
<member><function>fopen</function></member>
<member><function>fsockopen</function></member>
<member><function>popen</function></member>
<member><function>file_get_contents</function></member>
<member><function>pack</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
-->