Files
php-doc-ru/reference/filesystem/functions/fread.xml
Mikhail Alferov bdd9a7230e Update fread.xml
2024-05-21 03:45:57 +03:00

236 lines
8.0 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: ae5b5761e220b355014d0845e060ea1669befe7a Maintainer: shein Status: ready -->
<!-- Reviewed: no -->
<refentry xml:id="function.fread" xmlns="http://docbook.org/ns/docbook">
<refnamediv>
<refname>fread</refname>
<refpurpose>Читает файл в бинарно-безопасном режиме: как последовательность байтов</refpurpose>
</refnamediv>
<refsect1 role="description">
&reftitle.description;
<methodsynopsis>
<type class="union"><type>string</type><type>false</type></type><methodname>fread</methodname>
<methodparam><type>resource</type><parameter>stream</parameter></methodparam>
<methodparam><type>int</type><parameter>length</parameter></methodparam>
</methodsynopsis>
<para>
Функция <function>fread</function> считывает заданное параметром
<parameter>length</parameter> количество байтов из файлового указателя,
на который ссылается поток <parameter>stream</parameter>. Чтение останавливается, как только
выполнилось одно из следующих условий:
<itemizedlist>
<listitem>
<simpara>
функция прочитала количество байтов, которое указали в параметре <parameter>length</parameter>
</simpara>
</listitem>
<listitem>
<simpara>
наступило состояние EOF — конец файла
</simpara>
</listitem>
<listitem>
<simpara>
при чтении сетевых потоков: функция получила доступ к пакету или истекло
<link linkend="function.socket-set-timeout">время ожидания сокета</link>
</simpara>
</listitem>
<listitem>
<simpara>
если читается буферизованный поток, который не представляет
обычный файл, функция выполняет не больше одного чтения данных,
размер которых в байтах равен размеру порции (обычно это 8192);
в зависимости от ранее буферизованных данных размер возвращаемых
данных может быть больше размера одной порции данных.
</simpara>
</listitem>
</itemizedlist>
</para>
</refsect1>
<refsect1 role="parameters">
&reftitle.parameters;
<para>
<variablelist>
<varlistentry>
<term><parameter>stream</parameter></term>
<listitem>
&fs.file.pointer;
</listitem>
</varlistentry>
<varlistentry>
<term><parameter>length</parameter></term>
<listitem>
<para>
Параметр <parameter>length</parameter> указывает размер данных в байтах,
которые считает функция.
</para>
</listitem>
</varlistentry>
</variablelist>
</para>
</refsect1>
<refsect1 role="returnvalues">
&reftitle.returnvalues;
<para>
Функция возвращает прочитанную строку&return.falseforfailure;.
</para>
</refsect1>
<refsect1 role="examples">
&reftitle.examples;
<para>
<example>
<title>Простой пример использования функции <function>fread</function></title>
<programlisting role="php">
<![CDATA[
<?php
// Получаем содержимое файла в строку
$filename = "/usr/local/something.txt";
$handle = fopen($filename, "r");
$contents = fread($handle, filesize($filename));
fclose($handle);
?>
]]>
</programlisting>
</example>
</para>
<para>
<example>
<title>Пример побайтового чтения функцией <function>fread</function></title>
<warning>
<para>
В системах, которые различают двоичные и текстовые файлы
(например, ОС Windows), файл требуется открывать с включением флага
«b» в параметр mode функции <function>fopen</function>.
</para>
</warning>
<programlisting role="php">
<![CDATA[
<?php
$filename = "c:\\files\\somepic.gif";
$handle = fopen($filename, "rb");
$contents = fread($handle, filesize($filename));
fclose($handle);
?>
]]>
</programlisting>
</example>
</para>
<para>
<example>
<title>Примеры удалённого чтения функцией <function>fread</function></title>
<warning>
<para>
При чтении не из обычного локального файла, а, например, из потоков,
которые возвращаются при чтении
<link linkend="features.remote-files">удалённых файлов</link> или функциями
<function>popen</function> и <function>fsockopen</function>, чтение
остановится после получения функцией доступа к пакету. То есть
данные лучше собирать порциями, как показывают примеры в следующих
параграфах.
</para>
</warning>
<programlisting role="php">
<![CDATA[
<?php
$handle = fopen("http://www.example.com/", "rb");
$contents = stream_get_contents($handle);
fclose($handle);
?>
]]>
</programlisting>
<programlisting role="php">
<![CDATA[
<?php
$handle = fopen("http://www.example.com/", "rb");
if (FALSE === $handle) {
exit("Не удалось открыть поток по url адресу");
}
$contents = '';
while (!feof($handle)) {
$contents .= fread($handle, 8192);
}
fclose($handle);
?>
]]>
</programlisting>
</example>
</para>
</refsect1>
<refsect1 role="notes">
&reftitle.notes;
<note>
<para>
Когда требуется просто получить содержимое файла в виде строки,
вызывают функцию <function>file_get_contents</function>, поскольку
её производительность выше, чем у кода в приведённых примерах.
</para>
</note>
<note>
<para>
Обратите внимание, функция <function>fread</function> считывает данные
с текущей позиции указателя файла. Пользуйтесь функцией <function>ftell</function>,
чтобы найти текущую позицию указателя и функцией <function>rewind</function>,
чтобы перемотать позицию указателя в начало.
</para>
</note>
</refsect1>
<refsect1 role="seealso">
&reftitle.seealso;
<para>
<simplelist>
<member><function>fwrite</function></member>
<member><function>fopen</function></member>
<member><function>fsockopen</function></member>
<member><function>popen</function></member>
<member><function>fgets</function></member>
<member><function>fgetss</function></member>
<member><function>fscanf</function></member>
<member><function>file</function></member>
<member><function>fpassthru</function></member>
<member><function>fseek</function></member>
<member><function>ftell</function></member>
<member><function>rewind</function></member>
<member><function>unpack</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
-->