<?xml version="1.0" encoding="iso-8859-1"?>
<!-- $Revision: 1.21 $ -->
<!-- splitted from ./en/functions/filesystem.xml, last change in rev 1.25 -->
  <refentry id="function.fread">
   <refnamediv>
    <refname>fread</refname>
    <refpurpose>Binary-safe file read</refpurpose>
   </refnamediv>
   <refsect1>
    <title>Description</title>
     <methodsynopsis>
      <type>string</type><methodname>fread</methodname>
      <methodparam><type>resource</type><parameter>handle</parameter></methodparam>
      <methodparam><type>int</type><parameter>length</parameter></methodparam>
     </methodsynopsis>
    <simpara>
     <function>fread</function> reads up to
     <parameter>length</parameter> bytes from the file pointer
     referenced by <parameter>handle</parameter>. Reading stops when up to
     <parameter>length</parameter> bytes have been read, EOF 
     (end of file) is reached, (for network streams) when a packet becomes
     available, or (after opening userspace stream) when 8192 bytes have been read
     whichever comes first. 
    </simpara> 
    <simpara>
     Returns the read string or &false; in case of error.
    </simpara>
    <para>
     <informalexample>
      <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>
     </informalexample>
    </para>
    <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>
    <para>
     <informalexample>
      <programlisting role="php">
<![CDATA[
<?php
$filename = "c:\\files\\somepic.gif";
$handle = fopen($filename, "rb");
$contents = fread($handle, filesize($filename));
fclose($handle);
?>
]]>
      </programlisting>
     </informalexample>
    </para>

    <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>
    <para>
     <informalexample>
      <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>
     </informalexample>
    </para>
    <para>
     <informalexample>
      <programlisting role="php">
<![CDATA[
<?php
$handle = fopen("http://www.example.com/", "rb");
$contents = '';
while (!feof($handle)) {
  $contents .= fread($handle, 8192);
}
fclose($handle);
?>
]]>
      </programlisting>
     </informalexample>
    </para>
    <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>
    <simpara>
     See also <function>fwrite</function>, <function>fopen</function>,
     <function>fsockopen</function>, <function>popen</function>,
     <function>fgets</function>, <function>fgetss</function>,
     <function>fscanf</function>, <function>file</function>, and
     <function>fpassthru</function>.
    </simpara>
   </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:"../../../../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
-->