Files
php-doc-ru/reference/filesystem/functions/fread.xml
2022-07-14 12:21:50 +03:00

225 lines
7.6 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
-->