1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135
|
<?xml version="1.0" encoding="utf-8"?>
<!-- $Revision$ -->
<refentry xmlns="http://docbook.org/ns/docbook" xml:id="function.crc32">
<refnamediv>
<refname>crc32</refname>
<refpurpose>Calculates the crc32 polynomial of a string</refpurpose>
</refnamediv>
<refsect1 role="description">
&reftitle.description;
<methodsynopsis>
<type>int</type><methodname>crc32</methodname>
<methodparam><type>string</type><parameter>string</parameter></methodparam>
</methodsynopsis>
<para>
Generates the cyclic redundancy checksum polynomial of 32-bit
lengths of the <parameter>string</parameter>. This is usually used
to validate the integrity of data being transmitted.
</para>
<warning>
<simpara>
Because PHP's integer type is signed many crc32 checksums will
result in negative integers on 32bit platforms. On 64bit installations
all <function>crc32</function> results will be positive integers though.
</simpara>
<simpara>
So you need to use the "%u" formatter of <function>sprintf</function> or
<function>printf</function> to get the string representation of the
unsigned <function>crc32</function> checksum in decimal format.
</simpara>
<simpara>
For a hexadecimal representation of the checksum you can either use the
"%x" formatter of <function>sprintf</function> or <function>printf</function>
or the <function>dechex</function> conversion functions, both of these
also take care of converting the <function>crc32</function> result to
an unsigned integer.
</simpara>
<simpara>
Having 64bit installations also return negative integers for higher
result values was considered but would break the hexadecimal conversion
as negatives would get an extra 0xFFFFFFFF######## offset then. As
hexadecimal representation seems to be the most common use case we
decided to not break this even if it breaks direct decimal comparisons
in about 50% of the cases when moving from 32 to 64bits.
</simpara>
<simpara>
In retrospect having the function return an integer maybe wasn't the
best idea and returning a hex string representation right away (as
e.g. <function>md5</function> does) might have been a better plan to
begin with.
</simpara>
<simpara>
For a more portable solution you may also consider the generic
<function>hash</function>. <code>hash("crc32b", $str)</code> will
return the same string as <code>str_pad(dechex(crc32($str)), 8, '0', STR_PAD_LEFT)</code>.
</simpara>
</warning>
</refsect1>
<refsect1 role="parameters">
&reftitle.parameters;
<para>
<variablelist>
<varlistentry>
<term><parameter>string</parameter></term>
<listitem>
<para>
The data.
</para>
</listitem>
</varlistentry>
</variablelist>
</para>
</refsect1>
<refsect1 role="returnvalues">
&reftitle.returnvalues;
<para>
Returns the crc32 checksum of <parameter>string</parameter> as an integer.
</para>
</refsect1>
<refsect1 role="examples">
&reftitle.examples;
<para>
<example>
<title>Displaying a crc32 checksum</title>
<para>
This example shows how to print a converted checksum with the
<function>printf</function> function:
</para>
<programlisting role="php">
<![CDATA[
<?php
$checksum = crc32("The quick brown fox jumped over the lazy dog.");
printf("%u\n", $checksum);
?>
]]>
</programlisting>
</example>
</para>
</refsect1>
<refsect1 role="seealso">
&reftitle.seealso;
<para>
<simplelist>
<member><function>hash</function></member>
<member><function>md5</function></member>
<member><function>sha1</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
-->
|