<?xml version="1.0" encoding="utf-8"?>
<!-- $Revision$ -->
<refentry xmlns="http://docbook.org/ns/docbook" xmlns:xlink="http://www.w3.org/1999/xlink" xml:id="function.ip2long">
 <refnamediv>
  <refname>ip2long</refname>
  <refpurpose>Converts a string containing an (IPv4) Internet Protocol dotted address into a long integer</refpurpose>
 </refnamediv>
 
 <refsect1 role="description">
  &reftitle.description;
  <methodsynopsis>
   <type class="union"><type>int</type><type>false</type></type><methodname>ip2long</methodname>
   <methodparam><type>string</type><parameter>ip</parameter></methodparam>
  </methodsynopsis>
  <para>
   The function <function>ip2long</function> generates a long integer
   representation of IPv4 Internet network address from its Internet
   standard format (dotted string) representation. 
  </para>
  <para>
   <function>ip2long</function> will also work with non-complete IP
   addresses. Read <link xlink:href="&url.ip2long.tech;">&url.ip2long.tech;</link>
   for more info.
  </para>
 </refsect1>

 <refsect1 role="parameters">
  &reftitle.parameters;
  <para>
   <variablelist>
    <varlistentry>
     <term><parameter>ip</parameter></term>
     <listitem>
      <para>
       A standard format address.
      </para>
     </listitem>
    </varlistentry>
   </variablelist>
  </para>
 </refsect1>

 <refsect1 role="returnvalues">
  &reftitle.returnvalues;
  <para>
   Returns the long integer or &false; if <parameter>ip</parameter>
   is invalid.
  </para>
 </refsect1>

 <refsect1 role="examples">
  &reftitle.examples;
  <para>
   <example>
    <title><function>ip2long</function> Example</title>
    <programlisting role="php">
<![CDATA[
<?php
$ip = gethostbyname('www.example.com');
$out = "The following URLs are equivalent:<br />\n";
$out .= 'http://www.example.com/, http://' . $ip . '/, and http://' . sprintf("%u", ip2long($ip)) . "/<br />\n";
echo $out;
?>
]]>
    </programlisting>
   </example>
  </para>
  <para>
   <example>
    <title>Displaying an IP address</title>
    <para>
     This second example shows how to print a converted address with the
     <function>printf</function> function:
    </para>
    <programlisting role="php">
<![CDATA[
<?php
$ip   = gethostbyname('www.example.com');
$long = ip2long($ip);

if ($long == -1 || $long === FALSE) {
    echo 'Invalid IP, please try again';
} else {
    echo $ip   . "\n";            // 192.0.34.166
    echo $long . "\n";            // 3221234342 (-1073732954 on 32-bit systems, due to integer overflow)
    printf("%u\n", ip2long($ip)); // 3221234342
}
?>
]]>
    </programlisting>
   </example>
  </para>
 </refsect1>

 <refsect1 role="notes">
  &reftitle.notes;
  <note>
   <para>
    Because PHP's <type>int</type> type is signed, and many IP addresses
    will result in negative integers on 32-bit architectures, you need to use
    the "%u" formatter of <function>sprintf</function> or
    <function>printf</function> to get the string representation of the
    unsigned IP address.
   </para>
  </note>
  <note>
   <para>
    <function>ip2long</function> will return <literal>-1</literal> for the IP
    <literal>255.255.255.255</literal> on 32-bit systems due to the integer value overflowing.
   </para>
  </note>
 </refsect1>

 <refsect1 role="seealso">
  &reftitle.seealso;
  <para>
   <simplelist>
    <member><function>long2ip</function></member>
    <member><function>sprintf</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
-->
