<?xml version="1.0" encoding="utf-8"?> <!-- $Revision$ --> <refentry xmlns="http://docbook.org/ns/docbook" xml:id="function.fwrite"> <refnamediv> <refname>fwrite</refname> <refpurpose>Binary-safe file write</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> writes the contents of <parameter>string</parameter> to the file stream pointed to by <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> The string that is to be written. </para> </listitem> </varlistentry> <varlistentry> <term><parameter>length</parameter></term> <listitem> <para> If the <parameter>length</parameter> argument is given, writing will stop after <parameter>length</parameter> bytes have been written or the end of <parameter>string</parameter> is reached, whichever comes first. </para> <para> Note that if the <parameter>length</parameter> argument is given, then the <link linkend="ini.magic-quotes-runtime">magic_quotes_runtime</link> configuration option will be ignored and no slashes will be stripped from <parameter>string</parameter>. </para> </listitem> </varlistentry> </variablelist> </para> </refsect1> <refsect1 role="returnvalues"> &reftitle.returnvalues; <simpara> <function>fwrite</function> returns the number of bytes written, or &false; on error. </simpara> </refsect1> <refsect1 role="notes"> &reftitle.notes; <note> <para> Writing to a network stream may end before the whole string is written. Return value of <function>fwrite</function> may be checked: <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> 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> </note> <note> <para> If <parameter>handle</parameter> was <function>fopen</function>ed in append mode, <function>fwrite</function>s are atomic (unless the size of <parameter>string</parameter> exceeds the filesystem's block size, on some platforms, and as long as the file is on a local filesystem). That is, there is no need to <function>flock</function> a resource before calling <function>fwrite</function>; all of the data will be written without interruption. </para> </note> <note> <para> If writing twice to the file pointer, then the data will be appended to the end of the file content: <programlisting role="php"> <![CDATA[ <?php $fp = fopen('data.txt', 'w'); fwrite($fp, '1'); fwrite($fp, '23'); fclose($fp); // the content of 'data.txt' is now 123 and not 23! ?> ]]> </programlisting> </para> </note> </refsect1> <refsect1 role="examples"> &reftitle.examples; <para> <example> <title>A simple <function>fwrite</function> example</title> <programlisting role="php"> <![CDATA[ <?php $filename = 'test.txt'; $somecontent = "Add this to the file\n"; // Let's make sure the file exists and is writable first. if (is_writable($filename)) { // In our example we're opening $filename in append mode. // The file pointer is at the bottom of the file hence // that's where $somecontent will go when we fwrite() it. if (!$handle = fopen($filename, 'a')) { echo "Cannot open file ($filename)"; exit; } // Write $somecontent to our opened file. if (fwrite($handle, $somecontent) === FALSE) { echo "Cannot write to file ($filename)"; exit; } echo "Success, wrote ($somecontent) to file ($filename)"; fclose($handle); } else { echo "The file $filename is not writable"; } ?> ]]> </programlisting> </example> </para> </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 -->