<?xml version="1.0" encoding="utf-8"?> <!-- $Revision$ --> <refentry xmlns="http://docbook.org/ns/docbook" xml:id="function.fread"> <refnamediv> <refname>fread</refname> <refpurpose>Binary-safe file read</refpurpose> </refnamediv> <refsect1 role="description"> &reftitle.description; <methodsynopsis> <type>string</type><methodname>fread</methodname> <methodparam><type>resource</type><parameter>handle</parameter></methodparam> <methodparam><type>int</type><parameter>length</parameter></methodparam> </methodsynopsis> <para> <function>fread</function> reads up to <parameter>length</parameter> bytes from the file pointer referenced by <parameter>handle</parameter>. Reading stops as soon as one of the following conditions is met: <itemizedlist> <listitem> <simpara> <parameter>length</parameter> bytes have been read </simpara> </listitem> <listitem> <simpara> EOF (end of file) is reached </simpara> </listitem> <listitem> <simpara> a packet becomes available or the <link linkend="function.socket-set-timeout"> socket timeout</link> occurs (for network streams) </simpara> </listitem> <listitem> <simpara> if the stream is read buffered and it does not represent a plain file, at most one read of up to a number of bytes equal to the chunk size (usually 8192) is made; depending on the previously buffered data, the size of the returned data may be larger than the chunk size. </simpara> </listitem> </itemizedlist> </para> </refsect1> <refsect1 role="parameters"> &reftitle.parameters; <para> <variablelist> <varlistentry> <term><parameter>handle</parameter></term> <listitem> &fs.file.pointer; </listitem> </varlistentry> <varlistentry> <term><parameter>length</parameter></term> <listitem> <para> Up to <parameter>length</parameter> number of bytes read. </para> </listitem> </varlistentry> </variablelist> </para> </refsect1> <refsect1 role="returnvalues"> &reftitle.returnvalues; <para> Returns the read string &return.falseforfailure;. </para> </refsect1> <refsect1 role="examples"> &reftitle.examples; <para> <example> <title>A simple <function>fread</function> example</title> <programlisting role="php"> <![CDATA[ <?php // get contents of a file into a string $filename = "/usr/local/something.txt"; $handle = fopen($filename, "r"); $contents = fread($handle, filesize($filename)); fclose($handle); ?> ]]> </programlisting> </example> </para> <para> <example> <title>Binary <function>fread</function> example</title> <warning> <para> On systems which differentiate between binary and text files (i.e. Windows) the file must be opened with 'b' included in <function>fopen</function> mode parameter. </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>Remote <function>fread</function> examples</title> <warning> <para> When reading from anything that is not a regular local file, such as streams returned when reading <link linkend="features.remote-files">remote files</link> or from <function>popen</function> and <function>fsockopen</function>, reading will stop after a packet is available. This means that you should collect the data together in chunks as shown in the examples below. </para> </warning> <programlisting role="php"> <![CDATA[ <?php // For PHP 5 and up $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"); $contents = ''; while (!feof($handle)) { $contents .= fread($handle, 8192); } fclose($handle); ?> ]]> </programlisting> </example> </para> </refsect1> <refsect1 role="notes"> &reftitle.notes; <note> <para> If you just want to get the contents of a file into a string, use <function>file_get_contents</function> as it has much better performance than the code above. </para> </note> <note> <para> Note that <function>fread</function> reads from the current position of the file pointer. Use <function>ftell</function> to find the current position of the pointer and <function>rewind</function> to rewind the pointer position. </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>ftell</function></member> <member><function>rewind</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 -->