cvs: phpdoc-it /appendices migration52.xml
| From: | Marco Cucinato | Date: | Mon, 12 Nov 2007 00:18:36 +0000 |
| Subject: | cvs: phpdoc-it /appendices migration52.xml | ||
| Groups: | php.doc.it | ||
| Request: | Send a blank email to doc-it+get-848@lists.php.net to get a copy of this message | ||
cucinato Mon Nov 12 00:18:36 2007 UTC
Added files:
/phpdoc-it/appendices migration52.xml
Log:
added newly translated file
http://cvs.php.net/viewvc.cgi/phpdoc-it/appendices/migration52.xml?view=markup&rev=1.1 Index: phpdoc-it/appendices/migration52.xml +++ phpdoc-it/appendices/migration52.xml <?xml version="1.0" encoding="iso-8859-1"?> <!-- EN-Revision: 1.27 Maintainer: cucinato Status: working --> <appendix xml:id="migration52" xmlns="http://docbook.org/ns/docbook" xmlns:xlink="http://www.w3.org/1999/xlink"> <title>Migrazione da PHP 5.1.x a PHP 5.2.x</title> <section xml:id="migration52.changes"> <title>Cosa è cambiato in PHP 5.2.x</title> <para> Lq maggior parte dei miglioramenti in PHP 5.2.x non ha impatto sul codice esistente. Ci sono <link linkend="migration52.incompatible">poche incompatibilità</link> e <link linkend="migration52.error-messages">nuovi messaggi d'errore</link> che occorre tenere in conto, e il codice dovrebbe essere testato prima di cambiare le versioni di PHP negli ambienti di produzione. </para> <para> Se il sistema viene aggiornato da PHP 5.0.x, occorre leggere anche la sezione del manuale intitolata <link linkend="migration51">Note di Aggiornamento per il PHP 5.1.x</link> . </para> <para> Similmente, se il sistema vene aggiornato da PHP 4, si deve leggere la sezione del manuale intitolata <link linkend="migration5">Migrazione da PHP 4 a PHP 5</link> . </para> </section> <section xml:id="migration52.incompatible"> <title>Cambiamenti non compatibili</title> <para> Anche se la maggior parte del codice PHP 5 esistente dovrebbe funzionare senza modifiche, occorre fare attenzione ai seguenti cambiamenti imcompatibili col codice precedente: </para> <itemizedlist> <listitem> <simpara> <function>getrusage</function> restituisce &null; quando riceve argomenti non compatibili a partire da PHP 5.2.1. </simpara> </listitem> <listitem> <simpara> <link linkend="function.ziparchive-setCommentName"><function>ZipArchive::setCommentName</function></link> se ha con buon esito restituisce &true; a partire da PHP 5.2.1. </simpara> </listitem> <listitem> <simpara> <link linkend="function.ziparchive-setcommentindex"><function>ZipArchive::setCommentIndex</function></link> se ha buon esito restituisce &true; a partire da PHP 5.2.1. </simpara> </listitem> <listitem> <simpara> <function>SplFileObject::getFilename</function> restituisce il nome del file, e non il percorso relativo del file, a partire da PHP 5.2.1. </simpara> </listitem> <listitem> <simpara> Cambiata la priorità della variabile d'ambiente <constant>PHPRC</constant> in Win32 </simpara> <simpara> Ora la variabile d'ambiente PHPRC ha priorità rispetto al percorso salvato nel registro di Windows. </simpara> </listitem> <listitem> <simpara> CLI SAPI non controlla più la cartella corrente in &php.ini; o nel file <filename>php-cli.ini</filename> </simpara> <simpara> In PHP 5.1.x fu aggiunta una funzionalità non documentata nella versione CLI, la quale cercava nella cartella corrente un file di configurazione PHP, potenzialmente causando comortamenti non prevedibili nel caso fosse letto un file con configurazioni inattese. Questa funzionalità è stata rimossa nel 5.2.0, e PHP non cercherà più nella CWD la presenza di &php.ini; o <filename>php-cli.ini</filename>. Vedere anche la sezione <link linkend="features.commandline">command line</link> del manuale. </simpara> </listitem> <listitem> <simpara> Aggiunto un allarme quando si eseguono operazioni a modulo 0 </simpara> <simpara> Nelle prime bersioni di PHP, l'esecuzione di intero % 0 restituiva non dei messaggi di allarme, bensì un valore &false; inaspettato. Dal PHP 5.2.0, questa operazione crea un <constant>E_WARNING</constant>, come in tutte le altre situazioni in cui viene eseguita una divisione per 0. </simpara> <informalexample> <programlisting role="php"> <![CDATA[ <?php print 10 % 0; /* Warning: Division by zero in filename on line n */ ?> ]]> </programlisting> </informalexample> </listitem> <listitem> <simpara> La funzione<function>__toString</function> viene sempre chiamata dove possibile. </simpara> <simpara> Il metodo 'magico' <function>__toString</function> viene ora chiamato nel contesto di stringa, ovvero, ovunque un oggetto sia usato come una stringa. </simpara> <simpara> La soluzione di ripiego di restituire una stringa che contiene l'identificativo dell'oggetto è stata abbandonata col PHP 5.2.0. Questo è diventato problematico poiché un identificativo di oggetto non può essere considerato univoco. Questo cambiamento significa che qualsiasi applicazione che si basi sugli identificativi come valore di ritorno è da correggere. Un tentativo di utilizzare questo valore come stringa ora risulterà in un errore fatale intercettabile. </simpara> <informalexample> <programlisting role="php"> <![CDATA[ <?php class foo {} $foo = new foo; print $foo; /* Catchable fatal error: Object of class foo could not be converted to string in filename on line n */ ?> ]]> </programlisting> </informalexample> <simpara> Anche con <function>__toString</function>, gli oggetti non possono essere usati come indici o chiavi degli array. In futuro potrà essere aggiunto un supporto integrato, ma nel PHP 5.2.x occorre fornire una funzione di hashing personalizzata o utitlizzare la nuova funzione SPL <function>spl_object_hash</function>. </simpara> <simpara> Le eccezioni non possono essere lanciate dai metodi <function>__toString</function>. </simpara> <informalexample> <programlisting role="php"> <![CDATA[ <?php class foo { public function __toString() { throw new Exception; } } try { print new foo; /* Fatal error: Method foo::__toString() must not throw an exception in filename on line n */ } catch(Exception $e) {} ?> ]]> </programlisting> </informalexample> </listitem> <listitem> <simpara> Abbandonate le funzioni astratte statiche. </simpara> <simpara> A causa di una svista, PHP 5.0.x e 5.1.x permettevano funzioni astratte e statiche nelle classi. Dal PHP 5.2.x solo le interfacce possono averle. </simpara> <informalexample> <programlisting role="php"> <![CDATA[ <?php abstract class foo { abstract static function bar(); /* Strict Standards: Static function foo::bar() should not be abstract in filename on line n */ } ?> ]]> </programlisting> </informalexample> </listitem> <listitem> <simpara> <link linkend="ref.oci8">L'estensione Oracle</link> richiede almeno Oracle 10 in Windows. </simpara> </listitem> <listitem> <simpara> Aggiunto il supporto a RFC2397 (<literal>data:</literal> stream). </simpara> <simpara> L'introduzione dello schema di URL 'data' può portare ad un cambio nel comportamento sotto Windows. Se si lavora con un filesystem <acronym>NTFS</acronym> e nell'applicazione si usano i meta stream, non sarà più possibile effettuare operazioni su un file di nome 'data:' che venga raggiunto senza informazioni sul percorso. Il rimedio è utilizzare il protocollo 'file:' per accedere al file. </simpara> <simpara> Vedere anche <link xlink:href="&url.rfc;2397">RFC 2397</link> </simpara> <informalexample> <programlisting role="php"> <![CDATA[ <?php /* when allow_url_include is OFF (default) */ include "data:;base64,PD9waHAgcGhwaW5mbygpOz8+"; /* Warning: include(): URL file-access is disabled in the server configuration in filename on line n */ ?> ]]> </programlisting> </informalexample> </listitem> <listitem> <simpara> Regressione nei pattern glob() </simpara> <simpara> Nella versione 5.2.4 un fix di sicurezza ha causato una regressione per il pattern nella forma "/foo/*/bar/*". Dalla versione 5.2.5 invece di alzate un allarme la funzione glob() restituisce false quando le restrizioni openbase_dir sono violate. </simpara> </listitem> </itemizedlist> </section> <section xml:id="migration52.error-messages"> <title>Nuovi messaggi d'errore</title> <para> Di seguito i nuovi messaggi d'errore che non sono stati già esposti in questo documento. </para> <para> <example> <title>In PHP Core</title> <programlisting role="php"> <![CDATA[ <?php echo " "; session_regenerate_id(); /* Warning: session_regenerate_id(): Cannot regenerate session id - headers already sent in filename on line n */ str_word_count("string", 4); /* Warning: str_word_count(): Invalid format value 4 in filename on line n */ strripos("foo", "f", 4); /* Notice: strripos(): Offset is greater than the length of haystack string in filename on line n */ strrpos("foo", "f", 4); /* Notice: strrpos(): Offset is greater than the length of haystack string in filename on line n */ /* As of PHP 5.2.1, when allow_url_include is OFF (default) */ include "php://input"; /* Warning: include(): URL file-access is disabled in the server configuration in filename on line n */ ?> ]]> </programlisting> </example> </para> <para> <example> <title><link linkend="language.oop5">Object Oriented Code</link> in PHP Core</title> <programlisting role="php"> <![CDATA[ <?php interface foo { } class bar implements foo, foo { } /* Fatal error: Class bar cannot implement previously implemented interface foo in filename on line n */ class foo { public $bar; function __get($var) { return $this->bar; } } $foo = new foo; $bar =& $foo->prop; /* Notice: Indirect modification of overloaded property foo::$prop has no effect in filename on line n */ class foo implements iterator { public function current() { } public function next() { } public function key() { } public function valid() { } public function rewind() { } } $foo = new foo(); foreach($foo as &$ref) {} /* Fatal error: An iterator cannot be used with foreach by reference in filename on line n */ class foo { private function __construct() { } } class bar extends foo { public function __construct() { parent::__construct(); /* Fatal error: Cannot call private foo::__construct() in filename on line n */ } } new bar; stream_filter_register("", "class"); /* Warning: stream_filter_register(): Filter name cannot be empty in filename on line n */ stream_filter_register("filter", ""); /* Warning: stream_filter_register(): Class name cannot be empty in filename on line n */ ]]> </programlisting> </example> </para> <para> <example> <title>Nell'estensione <link linkend="ref.bzip2">bzip2</link></title> <programlisting role="php"> <![CDATA[ <?php bzopen("", "w"); /* Warning: bzopen(): filename cannot be empty in filename on line n */ bzopen("foo", "a"); /* Warning: bzopen(): 'a' is not a valid mode for bzopen(). Only 'w' and 'r' are supported in filename on line n */ $fp = fopen("foo", "w"); bzopen($fp, "r"); /* Warning: bzopen(): cannot read from a stream opened in write only mode in filename on line n */ ?> ]]> </programlisting> </example> </para> <para> <example> <title>Nell'estensione <link linkend="ref.datetime">datetime</link></title> <programlisting role="php"> <![CDATA[ <?php strtotime("today", "now"); /* Warning: strtotime() expects parameter 2 to be long, string given in filename on line n */ /* As of PHP 5.2.1 */ new DateTime(new stdclass); /* Fatal error: Uncaught exception 'Exception' with message 'DateTime::__construct() expects parameter 1 to be string, object given' in filename:n */ ?> ]]> </programlisting> </example> </para> <para> <example> <title>Nell'estensione <link linkend="ref.dbase">dBase</link></title> <programlisting role="php"> <![CDATA[ <?php dbase_open("foo", -1); /* Warning: Invalid access mode -1 in filename on line n */ /* As of PHP 5.2.1 */ dbase_open("foo", null); /* Warning: The filename cannot be empty in filename on line n */ ?> ]]> </programlisting> </example> </para> <para> <example> <title>Nell'estensione <link linkend="ref.mcrypt">mcrypt</link></title> <programlisting role="php"> <![CDATA[ <?php $key = "this is a secret key"; $td = mcrypt_module_open('tripledes', '', 'ecb', ''); $iv = mcrypt_create_iv (mcrypt_enc_get_iv_size($td), MCRYPT_RAND); mcrypt_generic_init($td, $key, $iv); $encrypted_data = mcrypt_generic($td, ""); /* Warning: mcrypt_generic(): An empty string was passed in filename on line n */ ?> ]]> </programlisting> </example> </para> <para> <example> <title>Nell'estensione <link linkend="ref.oci8">oci8</link></title> <programlisting role="php"> <![CDATA[ <?php oci_connect("user", "pass", "db", "bogus_charset"); /* Warning: Invalid character set name: bogus_charset in filename on line n */ $oci = oci_connect("user", "pass", "db"); oci_password_change($oci, "", "old", "new"); /* Warning: username cannot be empty in filename on line n */ oci_password_change($oci, "user", "", "new"); /* Warning: old password cannot be empty in filename on line n */ oci_password_change($oci, "user", "old", ""); /* Warning: new password cannot be empty in filename on line n */ ?> ]]> </programlisting> </example> </para> <para> <example> <title>Nell'estensione <link linkend="ref.spl">SPL</link></title> <programlisting role="php"> <![CDATA[ <?php $obj = new SplFileObject(__FILE__); $obj->fgetcsv("foo"); /* Warning: SplFileObject::fgetcsv(): delimiter must be a character in filename on line n */ $obj->fgetcsv(",", "foo"); /* Warning: SplFileObject::fgetcsv(): enclosure must be a character in filename on line n */ ?> ]]> </programlisting> </example> </para> <para> <example> <title>Nell'estensione <link linkend="ref.sem">Semaphore</link> (sysvmsg)</title> <programlisting role="php"> <![CDATA[ <?php /* Warning: maximum size of the message has to be greater then zero in filename on line n */ ?> ]]> </programlisting> </example> </para> <para> <example> <title>Esempio di <link linkend="ref.zip">Zip</link> con le versioni 5.2.1 e successive</title> <programlisting role="php"> <![CDATA[ <?php $obj = new ZipArchive(); $obj->open('archive.zip'); $obj->setCommentName('', 'comment'); /* Notice: ZipArchive::setCommentName(): Empty string as entry name in filename on line n */ /* As of PHP 5.2.1 */ $obj->getCommentName(''); /* Notice: ZipArchive::getCommentName(): Empty string as entry name in filename on line n */ ?> ]]> </programlisting> </example> </para> </section> <section xml:id="migration52.datetime"> <title>Modifiche nel supporto a <link linkend="ref.datetime">datetime</link> </title> <para> Dal PHP 5.1.0, esiste una estensione <literal>date</literal> nel core del PHP. Questa è la nuova implementazione del supporto datetime di PHP. Anche se essa cerca di indovinare le impostazioni del timezone del sistema, è opportuno impostare la timezone manualmente. Questo si può fare in tre modi: </para> <itemizedlist> <listitem> <simpara> nel &php.ini; usando la direttiva INI <link linkend="ini.date.timezone">date.timezone</link> </simpara> </listitem> <listitem> <simpara> sul sistema usando la variabile d'ambiente <constant>TZ</constant> </simpara> </listitem> <listitem> <simpara> nello script usando la funzione d'utilità <link linkend="function.date-default-timezone-get"><function>date_default_timezone_set</function></link> </simpara> </listitem> </itemizedlist> <para> Tutti i <link linkend="timezones">timezone</link> accettati sono elencati nel manuale PHP. </para> <para> Con l'arrivo del PHP 5.2.x, esistono degli <type>object</type> che rappresentano date e timezone, chiamati rispettivamente DateTime e DateTimeZone. I metodi corrispondono alle funzioni procedurali esistenti. </para> </section> <section xml:id="migration52.parameters"> <title>Nuovi Parametri</title> <para> Alcune funzioni accettano nuovi parametri opzionali, in PHP 5.2.x: </para> <para>PHP Core:</para> <itemizedlist> <listitem> <simpara> <function>htmlentities</function> - aggiunto <parameter>double_encode</parameter> in PHP 5.2.3. </simpara> </listitem> <listitem> <simpara> <function>htmlspecialchars</function> - aggiunto <parameter>double_encode</parameter> in PHP 5.2.3. </simpara> </listitem> <listitem> <simpara> <function>base64_decode</function> - aggiunto <parameter>strict</parameter> </simpara> </listitem> <listitem> <simpara> <function>setcookie</function> - aggiunto <parameter>httponly</parameter> </simpara> </listitem> <listitem> <simpara> <function>setrawcookie</function> - aggiunto <parameter>httponly</parameter> </simpara> </listitem> <listitem> <simpara> <function>session_set_cookie_params</function> - aggiunto <parameter>httponly</parameter> </simpara> </listitem> <listitem> <simpara> <function>memory_get_usage</function> - aggiunto <parameter>real_usage</parameter> </simpara> </listitem> <listitem> <simpara> <function>get_loaded_extensions</function> - aggiunto <parameter>zend_extensions</parameter> in PHP 5.2.4 </simpara> </listitem> </itemizedlist> <para><link linkend="ref.curl">curl</link>:</para> <itemizedlist> <listitem> <simpara> <function>curl_multi_info_read</function> - aggiunto <parameter>msgs_in_queue</parameter> </simpara> </listitem> </itemizedlist> <para><link linkend="ref.datetime">datetime</link></para> <itemizedlist> <listitem> <simpara> <function>date</function> - aggiunto il carattere di formato "u" (milliseconds) in PHP 5.2.2 </simpara> </listitem> </itemizedlist> <para><link linkend="ref.imap">imap</link>:</para> <itemizedlist> <listitem> <simpara> <function>imap_open</function> - aggiunto <parameter>n_retries</parameter> </simpara> </listitem> <listitem> <simpara> <function>imap_reopen</function> - aggiunto <parameter>n_retries</parameter> </simpara> </listitem> </itemizedlist> <para><link linkend="ref.mbstring">mbstring</link>:</para> <itemizedlist> <listitem> <simpara> <function>mb_strrpos</function> - aggiunto <parameter>offset</parameter> </simpara> <warning> <simpara> Il parametro <parameter>offset</parameter> è stato messo nella posizione in cui stava il parametro <parameter>encoding</parameter>. La compatibilità all'indietro è stata garantita permettendo che <parameter>encoding</parameter> venga specificato come terzo parametro. L'utilizzo di questa modalità non è raccomandato in quanto verrà rimossa in una futura versione di PHP. </simpara> </warning> </listitem> </itemizedlist> <para><link linkend="ref.ming">ming</link>:</para> <itemizedlist> <listitem> <simpara> <link linkend="function.swfmovie.streammp3"><function>swfmovie::streamMP3</function></link> - aggiunto <parameter>skip</parameter> in PHP 5.2.1 </simpara> </listitem> </itemizedlist> <para><link linkend="ref.openssl">openssl</link>:</para> <itemizedlist> <listitem> <simpara> <function>openssl_verify</function> - aggiunto <parameter>signature_algo</parameter> </simpara> </listitem> </itemizedlist> <para><link linkend="ref.pgsql">pgsql</link>:</para> <itemizedlist> <listitem> <simpara> <function>pg_escape_bytea</function> - aggiunto <parameter>connection</parameter> </simpara> </listitem> <listitem> <simpara> <function>pg_escape_string</function> - aggiunto <parameter>connection</parameter> </simpara> </listitem> </itemizedlist> <para><link linkend="ref.simplexml">simplexml</link>:</para> <itemizedlist> <listitem> <simpara> <link linkend="function.simplexml-element-construct"><function>SimpleXMLElement::__construct</function></link> - aggiunto <parameter>is_prefix</parameter> </simpara> </listitem> <listitem> <simpara> <link linkend="function.simplexml-element-attributes"><function>SimpleXMLElement::attributes</function></link> - aggiunto <parameter>is_prefix</parameter> </simpara> </listitem> <listitem> <simpara> <link linkend="function.simplexml-element-children"><function>SimpleXMLElement::children</function></link> - aggiunto <parameter>is_prefix</parameter> </simpara> </listitem> <listitem> <simpara> <function>simplexml_load_file</function> - aggiunto <parameter>is_prefix</parameter> </simpara> </listitem> <listitem> <simpara> <function>simplexml_load_string</function> - aggiunto <parameter>is_prefix</parameter> </simpara> </listitem> </itemizedlist> <para><link linkend="ref.spl">spl</link>:</para> <itemizedlist> <listitem> <simpara> array iterator_to_array(Traversable it [, bool use_keys = true]) - aggiunto <parameter>use_keys</parameter> in PHP 5.2.1 </simpara> </listitem> </itemizedlist> <para><link linkend="ref.xmlreader">xmlreader</link>:</para> <itemizedlist> <listitem> <simpara> <link linkend="function.xmlreader-open"><function>XMLReader::open</function></link> - aggiunto <parameter>encoding</parameter> e <parameter>options</parameter> </simpara> </listitem> <listitem> <simpara> <link linkend="function.xmlreader-xml"><function>XMLReader::XML</function></link> - aggiunto <parameter>encoding</parameter> e <parameter>options</parameter> </simpara> </listitem> </itemizedlist> <para><link linkend="ref.xmlwriter">XMLWriter</link>:</para> <itemizedlist> <listitem> <simpara> <link linkend="function.xmlwriter-write-element"><function>XMLWriter::WriteElement</function></link> - il parametro <parameter>content</parameter> è diventato opzionale dal PHP 5.2.3 </simpara> </listitem> <listitem> <simpara> <link linkend="function.xmlwriter-write-element-ns"><function>XMLWriter::WriteElementNs</function></link> - il parametro <parameter>content</parameter> è diventato opzionale dal PHP 5.2.3 </simpara> </listitem> </itemizedlist> </section> <section xml:id="migration52.functions"> <title>Nuove Funzioni</title> <para> PHP 5.2.x ha introdotto alcune nuove funzioni: </para> <para>PHP Core:</para> <itemizedlist> <listitem> <simpara> <function>array_fill_keys</function> - Crea un array usando come chiavi gli elementi del primo parametro, ognuno inizializzato a val </simpara> </listitem> <listitem> <simpara> <function>error_get_last</function> - Recupera l'ultimo errore nella forma di un array associativo. Restituisce &null; se non è ancora avvenuto un errore </simpara> </listitem> <listitem> <simpara> <function>image_type_to_extension</function> - Get file extension for image-type returned by getimagesize, exif_read_data, exif_thumbnail, exif_imagetype </simpara> </listitem> <listitem> <simpara> <function>memory_get_peak_usage</function> - Returns the peak allocated by PHP memory </simpara> </listitem> <listitem> <simpara> <function>sys_get_temp_dir</function> - Returns directory path used for temporary files. (Added in 5.2.1) </simpara> </listitem> <listitem> <simpara> <function>timezone_abbreviations_list</function> - Returns associative array containing DST, offset and the timezone name </simpara> </listitem> <listitem> <simpara> <function>timezone_identifiers_list</function> - Returns numerically indexed array with all timezone identifiers </simpara> </listitem> <listitem> <simpara> <function>timezone_name_from_abbr</function> - Returns the timezone name from abbreviation </simpara> </listitem> <listitem> <simpara> <function>stream_socket_shutdown</function> - Causes all or part of a full-duplex connection on the socket associated with stream to be shut down. As of PHP 5.2.1. </simpara> </listitem> </itemizedlist> <para><link linkend="ref.image">Image</link>:</para> <itemizedlist> <listitem> <simpara> <function>imagegrabscreen</function> - Grabs a screenshot of the whole screen. As of PHP 5.2.2. </simpara> </listitem> <listitem> <simpara> <function>imagegrabwindow</function> - Captures a window. As of PHP 5.2.2. </simpara> </listitem> </itemizedlist> <para><link linkend="ref.mbstring">mbstring</link>:</para> <itemizedlist> <listitem> <simpara> <function>mb_list_encodings_alias_names</function> - Returns an array of all supported entity encodings </simpara> </listitem> <listitem> <simpara> <function>mb_list_mime_names</function> - Returns an array or string of all supported mime names </simpara> </listitem> <listitem> <simpara> <function>mb_stripos</function> - Finds position of first occurrence of a string within another, case insensitive </simpara> </listitem> <listitem> <simpara> <function>mb_stristr</function> - Finds first occurrence of a string within another, case insensitive </simpara> </listitem> <listitem> <simpara> <function>mb_strrchr</function> - Finds the last occurrence of a character in a string within another </simpara> </listitem> <listitem> <simpara> <function>mb_strrichr</function> - Finds the last occurrence of a character in a string within another, case insensitive </simpara> </listitem> <listitem> <simpara> <function>mb_strripos</function> - Finds position of last occurrence of a string within another, case insensitive </simpara> </listitem> <listitem> <simpara> <function>mb_strstr</function> - Finds first occurrence of a string within another </simpara> </listitem> </itemizedlist> <para><link linkend="ref.ming">ming</link> (As of PHP 5.2.1):</para> <itemizedlist> <listitem> <simpara> void ming_setSWFCompression(int num) - Sets output compression </simpara> </listitem> <listitem> <simpara> void swfmovie::namedanchor(string name) - Creates anchor </simpara> </listitem> <listitem> <simpara> void swfmovie::protect([string pasword]) - Protects </simpara> </listitem> </itemizedlist> <para><link linkend="ref.openssl">openssl</link>:</para> <itemizedlist> <listitem> <simpara> <function>openssl_csr_get_public_key</function> - Extracts public key from a CERT and prepares it for use </simpara> </listitem> <listitem> <simpara> <function>openssl_csr_get_subject</function> - Returns the subject of a CERT </simpara> </listitem> <listitem> <simpara> <function>openssl_pkey_get_details</function> - Returns an array with the key details (bits, pkey, type) </simpara> </listitem> </itemizedlist> <para><link linkend="ref.spl">spl</link>:</para> <itemizedlist> <listitem> <simpara> <function>spl_object_hash</function> - Return hash id for given object </simpara> </listitem> <listitem> <simpara> int iterator_apply(Traversable it, mixed function [, mixed params]) - Calls a function for every element in an iterator </simpara> </listitem> </itemizedlist> <para><link linkend="ref.pcre">pcre</link>:</para> <itemizedlist> <listitem> <simpara> <function>preg_last_error</function> - Returns the error code of the last regex execution </simpara> </listitem> </itemizedlist> <para><link linkend="ref.pgsql">pgsql</link>:</para> <itemizedlist> <listitem> <simpara> <function>pg_field_table</function> - Returns the name of the table field belongs to, or table's oid if oid_only is true </simpara> </listitem> </itemizedlist> <para><link linkend="ref.posix">posix</link>:</para> <itemizedlist> <listitem> <simpara> <function>posix_initgroups</function> - Calculate the group access list for the user specified in name </simpara> </listitem> </itemizedlist> <para><link linkend="ref.gmp">gmp</link>:</para> <itemizedlist> <listitem> <simpara> <function>gmp_nextprime</function> - Finds next prime of a </simpara> </listitem> </itemizedlist> <para><link linkend="ref.xmlwriter">xmlwriter</link>:</para> <itemizedlist> <listitem> <simpara> <function>xmlwriter_full_end_element</function> - End current element - returns FALSE on error </simpara> </listitem> <listitem> <simpara> <function>xmlwriter_write_raw</function> - Write text - returns FALSE on error </simpara> </listitem> <listitem> <simpara> <function>xmlwriter_start_dtd_entity</function> - Create start DTD Entity - returns FALSE on error </simpara> </listitem> <listitem> <simpara> <function>xmlwriter_end_dtd_entity</function> - End current DTD Entity - returns FALSE on error </simpara> </listitem> <listitem> <simpara> <function>xmlwriter_write_dtd_entity</function> - Write full DTD Entity tag - returns FALSE on error </simpara> </listitem> </itemizedlist> </section> <section xml:id="migration52.methods"> <title>New Methods</title> <para> New methods were introduced in 5.2.0: </para> <para><link linkend="ref.dom">dom</link>:</para> <itemizedlist> <listitem> <simpara> <link linkend="function.dom-domdocument-registernodeclass"><function>DOMDocument::registerNodeClass</function></link> - Register extended class used to create base node type </simpara> </listitem> <listitem> <simpara> <link linkend="function.dom-domelement-setidattribute"><function>DOMElement::setIDAttribute</function></link> - Declares the attribute specified by name to be of type ID </simpara> </listitem> <listitem> <simpara> <link linkend="function.dom-domelement-setidattributenode"><function>DOMElement::setIDAttributeNode</function></link> - Declares the attribute specified by node to be of type ID </simpara> </listitem> <listitem> <simpara> <link linkend="function.dom-domelement-setidattributens"><function>DOMElement::setIDAttributeNS</function></link> - Declares the attribute specified by local name and namespace URI to be of type ID </simpara> </listitem> <listitem> <simpara> DOMNode::C14N([bool exclusive [, bool with_comments [, array xpath [, array ns_prefixes]]]]) - Canonicalize nodes to a string </simpara> </listitem> <listitem> <simpara> DOMNode::C14NFile(string uri [, bool exclusive [, bool with_comments [, array xpath [, array ns_prefixes]]]]) - Canonicalize nodes to a file </simpara> </listitem> <listitem> <simpara> DOMNode::getNodePath() - Gets an xpath for a node </simpara> </listitem> </itemizedlist> <para><link linkend="ref.soap">soap</link>:</para> <itemizedlist> <listitem> <simpara> SoapServer::setObject(object obj) - Sets object which will handle SOAP requests </simpara> </listitem> </itemizedlist> <para><link linkend="ref.spl">spl</link>:</para> <itemizedlist> <listitem> <simpara> int ArrayObject::asort(void) - Sort the entries by values </simpara> </listitem> <listitem> <simpara> int ArrayObject::ksort(void) - Sort the entries by key </simpara> </listitem> <listitem> <simpara> int ArrayObject::natcasesort(void) - Sort the entries by key using case insensitive "natural order" algorithm. </simpara> </listitem> <listitem> <simpara> int ArrayObject::natsort(void) - Sort the entries by values using "natural order" algorithm. </simpara> </listitem> <listitem> <simpara> int ArrayObject::uasort(callback cmp_function) - Sort the entries by values user defined function </simpara> </listitem> <listitem> <simpara> int ArrayObject::uksort(callback cmp_function) - Sort the entries by key using user defined function. </simpara> </listitem> <listitem> <simpara> ArrayIterator AppendIterator::getArrayIterator() - Get access to inner ArrayIterator </simpara> </listitem> <listitem> <simpara> int AppendIterator::getIteratorIndex() - Get index of iterator </simpara> </listitem> <listitem> <simpara> bool CachingIterator::getCache() - Return the cache </simpara> </listitem> <listitem> <simpara> int CachingIterator::getFlags() - Return the internal flags </simpara> </listitem> <listitem> <simpara> bool CachingIterator::offsetExists(mixed index) - Return whether the requested index exists </simpara> </listitem> <listitem> <simpara> string CachingIterator::offsetGet(mixed index) - Return the internal cache if used </simpara> </listitem> <listitem> <simpara> void CachingIterator::offsetSet(mixed index, mixed newval) - Set given index in cache </simpara> </listitem> <listitem> <simpara> void CachingIterator::offsetUnset(mixed index) - Unset given index in cache </simpara> </listitem> <listitem> <simpara> void CachingIterator::setFlags() - Set the internal flags </simpara> </listitem> <listitem> <simpara> array("delimiter" =>, "enclosure" =>) SplFileObject::getCsvControl(void) - Get the delimiter and enclosure character used in fgetcsv </simpara> </listitem> <listitem> <simpara> void SplFileObject::setCsvControl([string delimiter = ',' [, string enclosure = '"']]) - Set the delimiter and enclosure character used in fgetcsv </simpara> </listitem> </itemizedlist> <para><link linkend="ref.tidy">Tidy</link></para> <itemizedlist> <listitem> <simpara> tidyNode <link linkend="function.tidynode-getparent">tidyNode::getParent(void)</link> - Returns the parent node of the current node (Added in PHP 5.2.2) </simpara> </listitem> </itemizedlist> <para><link linkend="ref.xmlreader">XMLReader</link></para> <itemizedlist> <listitem> <simpara> boolean XMLReader::setSchema(string filename) - Use W3C XSD schema to validate the document as it is processed. Activation is only possible before the first Read() </simpara> </listitem> </itemizedlist> <para><link linkend="ref.zip">zip</link>:</para> <itemizedlist> <listitem> <simpara> <link linkend="function.ziparchive-addemptydir">ZipArchive::addEmptyDir()</link> - Creates an empty directory in the archive </simpara> </listitem> </itemizedlist> </section> <section xml:id="migration52.removed-extensions"> <title>Removed Extensions</title> <para> These extensions have been moved to PECL and are no longer part of the PHP distribution. The PECL package version of these extensions will be created according to user demand. </para> <itemizedlist> <listitem> <simpara> <link linkend="ref.filepro">filePro</link> </simpara> </listitem> <listitem> <simpara> <link linkend="ref.hwapi">Hyperwave API</link> </simpara> </listitem> </itemizedlist> </section> <section xml:id="migration52.new-extensions"> <title>New Extensions</title> <para> The following are new extensions added (by default) as of PHP 5.2.0: </para> <itemizedlist> <listitem> <simpara> <link linkend="ref.filter">Filter</link> - validates and filters data, and is designed for use with insecure data such as user input. This extension is enabled by default; the default mode RAW does not impact input data in any way. </simpara> </listitem> <listitem> <simpara> <link linkend="ref.json">JSON</link> - implements the JavaScript Object Notation (JSON) data interchange format. This extension is enabled by default. </simpara> </listitem> <listitem> <simpara> <link linkend="ref.zip">Zip</link> - enables you to transparently read or write ZIP compressed archives and the files inside them. </simpara> </listitem> </itemizedlist> </section> <section xml:id="migration52.classes"> <title>New Classes</title> <para> The following classes were introduced in PHP 5.2.0: </para> <itemizedlist> <listitem> <simpara> <link linkend="ref.datetime">DateTime</link> </simpara> </listitem> <listitem> <simpara> <link linkend="ref.datetime">DateTimeZone</link> </simpara> </listitem> <listitem> <simpara> RegexIterator - extends FilterIterator; implements Iterator, Traversable, OuterIterator </simpara> <simpara> Constants: </simpara> <itemizedlist> <listitem> <simpara> <constant>RegexIterator::ALL_MATCHES</constant> </simpara> </listitem> <listitem> <simpara> <constant>RegexIterator::GET_MATCH</constant> </simpara> </listitem> <listitem> <simpara> <constant>RegexIterator::MATCH</constant> </simpara> </listitem> <listitem> <simpara> <constant>RegexIterator::REPLACE</constant> </simpara> </listitem> <listitem> <simpara> <constant>RegexIterator::SPLIT</constant> </simpara> </listitem> <listitem> <simpara> <constant>RegexIterator::USE_KEY</constant> </simpara> </listitem> </itemizedlist> <simpara> Properties: </simpara> <itemizedlist> <listitem> <simpara> public <property>replacement</property> </simpara> </listitem> </itemizedlist> <simpara> Methods: </simpara> <itemizedlist> <listitem> <simpara> RegexIterator::__construct(Iterator it, string regex [, int mode [, int flags [, int preg_flags]]]) - Create an RegexIterator from another iterator and a regular expression </simpara> </listitem> <listitem> <simpara> bool RegexIterator::accept() - Match (string)current() against regular expression </simpara> </listitem> <listitem> <simpara> bool RegexIterator::getFlags() - Returns current operation flags </simpara> </listitem> <listitem> <simpara> bool RegexIterator::getMode() - Returns current operation mode </simpara> </listitem> <listitem> <simpara> bool RegexIterator::getPregFlags() - Returns current PREG flags (if in use or &null;) </simpara> </listitem> <listitem> <simpara> bool RegexIterator::setFlags(int new_flags) - Set operation flags </simpara> </listitem> <listitem> <simpara> bool RegexIterator::setMode(int new_mode) - Set new operation mode </simpara> </listitem> <listitem> <simpara> bool RegexIterator::setPregFlags(int new_flags) - Set PREG flags </simpara> </listitem> </itemizedlist> </listitem> <listitem> <simpara> RecursiveRegexIterator </simpara> <simpara> Constants: </simpara> <itemizedlist> <listitem> <simpara> <constant>RecursiveRegexIterator::ALL_MATCHES</constant> </simpara> </listitem> <listitem> <simpara> <constant>RecursiveRegexIterator::GET_MATCH</constant> </simpara> </listitem> <listitem> <simpara> <constant>RecursiveRegexIterator::MATCH</constant> </simpara> </listitem> <listitem> <simpara> <constant>RecursiveRegexIterator::REPLACE</constant> </simpara> </listitem> <listitem> <simpara> <constant>RecursiveRegexIterator::SPLIT</constant> </simpara> </listitem> <listitem> <simpara> <constant>RecursiveRegexIterator::USE_KEY</constant> </simpara> </listitem> </itemizedlist> <simpara> Methods: </simpara> <itemizedlist> <listitem> <simpara> RecursiveRegexIterator::__construct(RecursiveIterator it, string regex [, int mode [, int flags [, int preg_flags]]]) - Create an RecursiveRegexIterator from another recursive iterator and a regular expression </simpara> </listitem> <listitem> <simpara> RecursiveRegexIterator RecursiveRegexIterator::getChildren() - Return the inner iterator's children contained in a RecursiveRegexIterator </simpara> </listitem> <listitem> <simpara> bool RecursiveRegexIterator::hasChildren() - Check whether the inner iterator's current element has children </simpara> </listitem> </itemizedlist> </listitem> </itemizedlist> </section> <section xml:id="migration52.global-constants"> <title>New Global Constants</title> <para>PHP Core:</para> <itemizedlist> <listitem> <simpara> <constant>M_EULER</constant> </simpara> </listitem> <listitem> <simpara> <constant>M_LNPI</constant> </simpara> </listitem> <listitem> <simpara> <constant>M_SQRT3</constant> </simpara> </listitem> <listitem> <simpara> <constant>M_SQRTPI</constant> </simpara> </listitem> <listitem> <simpara> <constant>PATHINFO_FILENAME</constant> </simpara> </listitem> <listitem> <simpara> <constant>PREG_BACKTRACK_LIMIT_ERROR</constant> </simpara> </listitem> <listitem> <simpara> <constant>PREG_BAD_UTF8_ERROR</constant> </simpara> </listitem> <listitem> <simpara> <constant>PREG_INTERNAL_ERROR</constant> </simpara> </listitem> <listitem> <simpara> <constant>PREG_NO_ERROR</constant> </simpara> </listitem> <listitem> <simpara> <constant>PREG_RECURSION_LIMIT_ERROR</constant> </simpara> </listitem> <listitem> <simpara> <constant>UPLOAD_ERR_EXTENSION</constant> </simpara> </listitem> <listitem> <simpara> <constant>STREAM_SHUT_RD</constant> </simpara> </listitem> <listitem> <simpara> <constant>STREAM_SHUT_WR</constant> </simpara> </listitem> <listitem> <simpara> <constant>STREAM_SHUT_RDWR</constant> </simpara> </listitem> </itemizedlist> <para><link linkend="ref.curl">curl</link>:</para> <itemizedlist> <listitem> <simpara> <constant>CURLE_FILESIZE_EXCEEDED</constant> </simpara> </listitem> <listitem> <simpara> <constant>CURLE_FTP_SSL_FAILED</constant> </simpara> </listitem> <listitem> <simpara> <constant>CURLE_LDAP_INVALID_URL</constant> </simpara> </listitem> <listitem> <simpara> <constant>CURLFTPAUTH_DEFAULT</constant> </simpara> </listitem> <listitem> <simpara> <constant>CURLFTPAUTH_SSL</constant> </simpara> </listitem> <listitem> <simpara> <constant>CURLFTPAUTH_TLS</constant> </simpara> </listitem> <listitem> <simpara> <constant>CURLFTPSSL_ALL</constant> </simpara> </listitem> <listitem> <simpara> <constant>CURLFTPSSL_CONTROL</constant> </simpara> </listitem> <listitem> <simpara> <constant>CURLFTPSSL_NONE</constant> </simpara> </listitem> <listitem> <simpara> <constant>CURLFTPSSL_TRY</constant> </simpara> </listitem> <listitem> <simpara> <constant>CURLOPT_FTP_SSL</constant> </simpara> </listitem> <listitem> <simpara> <constant>CURLOPT_FTPSSLAUTH</constant> </simpara> </listitem> <listitem> <simpara> <constant>CURLOPT_TCP_NODELAY</constant> </simpara> <simpara> Added in PHP 5.2.1. </simpara> </listitem> <listitem> <simpara> <constant>CURLOPT_TIMEOUT_MS</constant> </simpara> <simpara> Added in PHP 5.2.3 </simpara> </listitem> <listitem> <simpara> <constant>CURLOPT_CONNECTTIMEOUT_MS</constant> </simpara> <simpara> Added in PHP 5.2.3 </simpara> </listitem> </itemizedlist> <para><link linkend="ref.gmp">GMP</link>:</para> <itemizedlist> <listitem> <simpara> <constant>GMP_VERSION</constant> </simpara> <simpara> Added in PHP 5.2.2. </simpara> </listitem> </itemizedlist> <para><link linkend="ref.ming">ming</link>:</para> <itemizedlist> <listitem> <simpara> <constant>SWFTEXTFIELD_USEFONT</constant> </simpara> </listitem> <listitem> <simpara> <constant>SWFTEXTFIELD_AUTOSIZE</constant> </simpara> </listitem> <listitem> <simpara> <constant>SWF_SOUND_NOT_COMPRESSED</constant> </simpara> </listitem> <listitem> <simpara> <constant>SWF_SOUND_ADPCM_COMPRESSED</constant> </simpara> </listitem> <listitem> <simpara> <constant>SWF_SOUND_MP3_COMPRESSED</constant> </simpara> </listitem> <listitem> <simpara> <constant>SWF_SOUND_NOT_COMPRESSED_LE</constant> </simpara> </listitem> <listitem> <simpara> <constant>SWF_SOUND_NELLY_COMPRESSED</constant> </simpara> </listitem> <listitem> <simpara> <constant>SWF_SOUND_5KHZ</constant> </simpara> </listitem> <listitem> <simpara> <constant>SWF_SOUND_11KHZ</constant> </simpara> </listitem> <listitem> <simpara> <constant>SWF_SOUND_22KHZ</constant> </simpara> </listitem> <listitem> <simpara> <constant>SWF_SOUND_44KHZ</constant> </simpara> </listitem> <listitem> <simpara> <constant>SWF_SOUND_8BITS</constant> </simpara> </listitem> <listitem> <simpara> <constant>SWF_SOUND_16BITS</constant> </simpara> </listitem> <listitem> <simpara> <constant>SWF_SOUND_MONO</constant> </simpara> </listitem> <listitem> <simpara> <constant>SWF_SOUND_STEREO</constant> </simpara> </listitem> </itemizedlist> <para><link linkend="ref.openssl">openssl</link>:</para> <itemizedlist> <listitem> <simpara> <constant>OPENSSL_VERSION_NUMBER</constant> </simpara> </listitem> <listitem> <simpara> <constant>OPENSSL_VERSION_TEXT</constant> </simpara> </listitem> </itemizedlist> <para><link linkend="ref.snmp">snmp</link>:</para> <itemizedlist> <listitem> <simpara> <constant>SNMP_OID_OUTPUT_FULL</constant> </simpara> </listitem> <listitem> <simpara> <constant>SNMP_OID_OUTPUT_NUMERIC</constant> </simpara> </listitem> </itemizedlist> <para><link linkend="ref.sem">Semaphore</link>:</para> <itemizedlist> <listitem> <simpara> <constant>MSG_EAGAIN</constant> </simpara> </listitem> <listitem> <simpara> <constant>MSG_ENOMSG</constant> </simpara> </listitem> </itemizedlist> </section> <section xml:id="migration52.class-constants"> <title>New Class Constants</title> <para><link linkend="ref.pdo">pdo</link>:</para> <itemizedlist> <listitem> <simpara> <constant>PDO::ATTR_DEFAULT_FETCH_MODE</constant> </simpara> </listitem> <listitem> <simpara> <constant>PDO::FETCH_PROPS_LATE</constant> </simpara> </listitem> <listitem> <simpara> <constant>PDO::FETCH_KEY_PAIR</constant> </simpara> <simpara> Fetches a 2 column result set into an associated array. (Added in PHP 5.2.3) </simpara> </listitem> </itemizedlist> <para><link linkend="ref.spl">spl</link>:</para> <itemizedlist> <listitem> <simpara> <constant>CachingIterator::FULL_CACHE</constant> </simpara> </listitem> <listitem> <simpara> <constant>CachingIterator::TOSTRING_USE_INNER</constant> </simpara> </listitem> <listitem> <simpara> <constant>SplFileObject::READ_AHEAD</constant> </simpara> </listitem> <listitem> <simpara> <constant>SplFileObject::READ_CSV</constant> </simpara> </listitem> <listitem> <simpara> <constant>SplFileObject::SKIP_EMPTY</constant> </simpara> </listitem> </itemizedlist> </section> <section xml:id="migration52.newconf"> <title>New INI Configuration Directives</title> <para> New &php.ini; directives introduced in PHP 5.2.0: </para> <itemizedlist> <listitem> <simpara> <link linkend="ini.allow-url-include">allow_url_include</link> </simpara> <simpara> This useful option makes it possible to differentiate between standard file operations on remote files, and the inclusion of remote files. While the former is usually desirable, the latter can be a security risk if used naively. Starting with PHP 5.2.0, you can allow remote file operations while disallowing the inclusion of remote files in local scripts. In fact, this is the default configuration. </simpara> </listitem> <listitem> <simpara> <link linkend="ini.pcre.backtrack-limit">pcre.backtrack_limit</link> </simpara> <simpara> PCRE's backtracking limit. </simpara> </listitem> <listitem> <simpara> <link linkend="ini.pcre.recursion-limit">pcre.recursion_limit</link> </simpara> <simpara> PCRE's recursion limit. Please note that if you set this value to a high number you may consume all the available process stack and eventually crash PHP (due to reaching the stack size limit imposed by the Operating System). </simpara> </listitem> <listitem> <simpara> <link linkend="ini.session.cookie-httponly">session.cookie_httponly</link> </simpara> <simpara> Marks the cookie as accessible only through the HTTP protocol. This means that the cookie won't be accessible by scripting languages, such as JavaScript. This setting can effectively help to reduce identity theft through XSS attacks (although it is not supported by all browsers). </simpara> </listitem> </itemizedlist> <para> New directives in PHP 5.2.2: </para> <itemizedlist> <listitem> <simpara> <link linkend="ini.max-input-nesting-level">max_input_nesting_level</link> </simpara> <simpara> Limits how deep <link linkend="language.variables.external">input variables</link> can be nested, default is 64. </simpara> </listitem> </itemizedlist> </section> <section xml:id="migration52.errorrep"> <title>Error Reporting</title> <para> Some of the existing <constant>E_ERROR</constant> conditions have been converted to something that can be caught with a user-defined error handler. If an <link linkend="errorfunc.constants"><constant>E_RECOVERABLE_ERROR</constant></link> is not handled, it will behave in the same way as <constant>E_ERROR</constant> behaves in all versions of PHP. Errors of this type are logged as <literal>Catchable fatal error</literal>. </para> <para> This change means that the value of the <constant>E_ALL</constant> <link linkend="ini.error-reporting">error_reporting</link> constant is now 6143, where the previous value was 2047. Because PHP constants have no meaning outside of PHP, in some cases the integer value is used instead so these will need to be adjusted. So for example by setting the error_reporting mode from either the <link linkend="apache.configuration">httpd.conf</link> or the <filename>.htaccess</filename> files, the value has to be changed accordingly. The same applies when the numeric values are used rather than the constants in PHP scripts. </para> <para> As a side-effect of a change made to prevent duplicate error messages when <link linkend="ini.track-errors">track_errors</link> is <literal>On</literal>, it is now necessary to return &false; from user defined error handlers in order to populate <link linkend="reserved.variables.phperrormsg">$php_errormsg</link>. This provides a fine-grain control over the levels of messages stored. </para> </section> <section xml:id="migration52.other"> <title>Other Enhancements</title> <itemizedlist> <listitem> <simpara> Improved memory manager and increased default memory limit. </simpara> <simpara> The new memory manager allocates less memory and works faster than the previous incarnation. It allocates memory from the system in large blocks, and then manages the heap by itself. The memory_limit value in &php.ini; is checked, not for each emalloc() call (as before), but for actual blocks requested from the system. This means that memory_limit is far more accurate than it used to be, since the old memory manager didn't calculate all the memory overhead used by the malloc library. </simpara> <simpara> Thanks to this new-found accuracy memory usage may appear to have increased, although actually it has not. To accommodate this apparent increase, the default memory_limit setting was also increased - from 8 to 16 megabytes. </simpara> </listitem> <listitem> <simpara> Added support for constructors in interfaces to force constructor signature checks in implementations. </simpara> <simpara> Starting with PHP 5.2.0, interfaces can have constructors. However, if you choose to declare a constructor in an interface, each class implementing that interface MUST include a constructor with a signature matching that of the base interface constructor. By 'signature' we mean the parameter and return type definitions, including any type hints and including whether the data is passed by reference or by value. </simpara> </listitem> </itemizedlist> </section> </appendix> <!-- 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 -->
http://cvs.php.net/viewvc.cgi/phpdoc-it/appendices/migration52.xml?view=markup&rev=1.1 Index: phpdoc-it/appendices/migration52.xml +++ phpdoc-it/appendices/migration52.xml <?xml version="1.0" encoding="iso-8859-1"?> <!-- EN-Revision: 1.27 Maintainer: cucinato Status: working --> <appendix xml:id="migration52" xmlns="http://docbook.org/ns/docbook" xmlns:xlink="http://www.w3.org/1999/xlink"> <title>Migrazione da PHP 5.1.x a PHP 5.2.x</title> <section xml:id="migration52.changes"> <title>Cosa è cambiato in PHP 5.2.x</title> <para> Lq maggior parte dei miglioramenti in PHP 5.2.x non ha impatto sul codice esistente. Ci sono <link linkend="migration52.incompatible">poche incompatibilità</link> e <link linkend="migration52.error-messages">nuovi messaggi d'errore</link> che occorre tenere in conto, e il codice dovrebbe essere testato prima di cambiare le versioni di PHP negli ambienti di produzione. </para> <para> Se il sistema viene aggiornato da PHP 5.0.x, occorre leggere anche la sezione del manuale intitolata <link linkend="migration51">Note di Aggiornamento per il PHP 5.1.x</link> . </para> <para> Similmente, se il sistema vene aggiornato da PHP 4, si deve leggere la sezione del manuale intitolata <link linkend="migration5">Migrazione da PHP 4 a PHP 5</link> . </para> </section> <section xml:id="migration52.incompatible"> <title>Cambiamenti non compatibili</title> <para> Anche se la maggior parte del codice PHP 5 esistente dovrebbe funzionare senza modifiche, occorre fare attenzione ai seguenti cambiamenti imcompatibili col codice precedente: </para> <itemizedlist> <listitem> <simpara> <function>getrusage</function> restituisce &null; quando riceve argomenti non compatibili a partire da PHP 5.2.1. </simpara> </listitem> <listitem> <simpara> <link linkend="function.ziparchive-setCommentName"><function>ZipArchive::setCommentName</function></link> se ha con buon esito restituisce &true; a partire da PHP 5.2.1. </simpara> </listitem> <listitem> <simpara> <link linkend="function.ziparchive-setcommentindex"><function>ZipArchive::setCommentIndex</function></link> se ha buon esito restituisce &true; a partire da PHP 5.2.1. </simpara> </listitem> <listitem> <simpara> <function>SplFileObject::getFilename</function> restituisce il nome del file, e non il percorso relativo del file, a partire da PHP 5.2.1. </simpara> </listitem> <listitem> <simpara> Cambiata la priorità della variabile d'ambiente <constant>PHPRC</constant> in Win32 </simpara> <simpara> Ora la variabile d'ambiente PHPRC ha priorità rispetto al percorso salvato nel registro di Windows. </simpara> </listitem> <listitem> <simpara> CLI SAPI non controlla più la cartella corrente in &php.ini; o nel file <filename>php-cli.ini</filename> </simpara> <simpara> In PHP 5.1.x fu aggiunta una funzionalità non documentata nella versione CLI, la quale cercava nella cartella corrente un file di configurazione PHP, potenzialmente causando comortamenti non prevedibili nel caso fosse letto un file con configurazioni inattese. Questa funzionalità è stata rimossa nel 5.2.0, e PHP non cercherà più nella CWD la presenza di &php.ini; o <filename>php-cli.ini</filename>. Vedere anche la sezione <link linkend="features.commandline">command line</link> del manuale. </simpara> </listitem> <listitem> <simpara> Aggiunto un allarme quando si eseguono operazioni a modulo 0 </simpara> <simpara> Nelle prime bersioni di PHP, l'esecuzione di intero % 0 restituiva non dei messaggi di allarme, bensì un valore &false; inaspettato. Dal PHP 5.2.0, questa operazione crea un <constant>E_WARNING</constant>, come in tutte le altre situazioni in cui viene eseguita una divisione per 0. </simpara> <informalexample> <programlisting role="php"> <![CDATA[ <?php print 10 % 0; /* Warning: Division by zero in filename on line n */ ?> ]]> </programlisting> </informalexample> </listitem> <listitem> <simpara> La funzione<function>__toString</function> viene sempre chiamata dove possibile. </simpara> <simpara> Il metodo 'magico' <function>__toString</function> viene ora chiamato nel contesto di stringa, ovvero, ovunque un oggetto sia usato come una stringa. </simpara> <simpara> La soluzione di ripiego di restituire una stringa che contiene l'identificativo dell'oggetto è stata abbandonata col PHP 5.2.0. Questo è diventato problematico poiché un identificativo di oggetto non può essere considerato univoco. Questo cambiamento significa che qualsiasi applicazione che si basi sugli identificativi come valore di ritorno è da correggere. Un tentativo di utilizzare questo valore come stringa ora risulterà in un errore fatale intercettabile. </simpara> <informalexample> <programlisting role="php"> <![CDATA[ <?php class foo {} $foo = new foo; print $foo; /* Catchable fatal error: Object of class foo could not be converted to string in filename on line n */ ?> ]]> </programlisting> </informalexample> <simpara> Anche con <function>__toString</function>, gli oggetti non possono essere usati come indici o chiavi degli array. In futuro potrà essere aggiunto un supporto integrato, ma nel PHP 5.2.x occorre fornire una funzione di hashing personalizzata o utitlizzare la nuova funzione SPL <function>spl_object_hash</function>. </simpara> <simpara> Le eccezioni non possono essere lanciate dai metodi <function>__toString</function>. </simpara> <informalexample> <programlisting role="php"> <![CDATA[ <?php class foo { public function __toString() { throw new Exception; } } try { print new foo; /* Fatal error: Method foo::__toString() must not throw an exception in filename on line n */ } catch(Exception $e) {} ?> ]]> </programlisting> </informalexample> </listitem> <listitem> <simpara> Abbandonate le funzioni astratte statiche. </simpara> <simpara> A causa di una svista, PHP 5.0.x e 5.1.x permettevano funzioni astratte e statiche nelle classi. Dal PHP 5.2.x solo le interfacce possono averle. </simpara> <informalexample> <programlisting role="php"> <![CDATA[ <?php abstract class foo { abstract static function bar(); /* Strict Standards: Static function foo::bar() should not be abstract in filename on line n */ } ?> ]]> </programlisting> </informalexample> </listitem> <listitem> <simpara> <link linkend="ref.oci8">L'estensione Oracle</link> richiede almeno Oracle 10 in Windows. </simpara> </listitem> <listitem> <simpara> Aggiunto il supporto a RFC2397 (<literal>data:</literal> stream). </simpara> <simpara> L'introduzione dello schema di URL 'data' può portare ad un cambio nel comportamento sotto Windows. Se si lavora con un filesystem <acronym>NTFS</acronym> e nell'applicazione si usano i meta stream, non sarà più possibile effettuare operazioni su un file di nome 'data:' che venga raggiunto senza informazioni sul percorso. Il rimedio è utilizzare il protocollo 'file:' per accedere al file. </simpara> <simpara> Vedere anche <link xlink:href="&url.rfc;2397">RFC 2397</link> </simpara> <informalexample> <programlisting role="php"> <![CDATA[ <?php /* when allow_url_include is OFF (default) */ include "data:;base64,PD9waHAgcGhwaW5mbygpOz8+"; /* Warning: include(): URL file-access is disabled in the server configuration in filename on line n */ ?> ]]> </programlisting> </informalexample> </listitem> <listitem> <simpara> Regressione nei pattern glob() </simpara> <simpara> Nella versione 5.2.4 un fix di sicurezza ha causato una regressione per il pattern nella forma "/foo/*/bar/*". Dalla versione 5.2.5 invece di alzate un allarme la funzione glob() restituisce false quando le restrizioni openbase_dir sono violate. </simpara> </listitem> </itemizedlist> </section> <section xml:id="migration52.error-messages"> <title>Nuovi messaggi d'errore</title> <para> Di seguito i nuovi messaggi d'errore che non sono stati già esposti in questo documento. </para> <para> <example> <title>In PHP Core</title> <programlisting role="php"> <![CDATA[ <?php echo " "; session_regenerate_id(); /* Warning: session_regenerate_id(): Cannot regenerate session id - headers already sent in filename on line n */ str_word_count("string", 4); /* Warning: str_word_count(): Invalid format value 4 in filename on line n */ strripos("foo", "f", 4); /* Notice: strripos(): Offset is greater than the length of haystack string in filename on line n */ strrpos("foo", "f", 4); /* Notice: strrpos(): Offset is greater than the length of haystack string in filename on line n */ /* As of PHP 5.2.1, when allow_url_include is OFF (default) */ include "php://input"; /* Warning: include(): URL file-access is disabled in the server configuration in filename on line n */ ?> ]]> </programlisting> </example> </para> <para> <example> <title><link linkend="language.oop5">Object Oriented Code</link> in PHP Core</title> <programlisting role="php"> <![CDATA[ <?php interface foo { } class bar implements foo, foo { } /* Fatal error: Class bar cannot implement previously implemented interface foo in filename on line n */ class foo { public $bar; function __get($var) { return $this->bar; } } $foo = new foo; $bar =& $foo->prop; /* Notice: Indirect modification of overloaded property foo::$prop has no effect in filename on line n */ class foo implements iterator { public function current() { } public function next() { } public function key() { } public function valid() { } public function rewind() { } } $foo = new foo(); foreach($foo as &$ref) {} /* Fatal error: An iterator cannot be used with foreach by reference in filename on line n */ class foo { private function __construct() { } } class bar extends foo { public function __construct() { parent::__construct(); /* Fatal error: Cannot call private foo::__construct() in filename on line n */ } } new bar; stream_filter_register("", "class"); /* Warning: stream_filter_register(): Filter name cannot be empty in filename on line n */ stream_filter_register("filter", ""); /* Warning: stream_filter_register(): Class name cannot be empty in filename on line n */ ]]> </programlisting> </example> </para> <para> <example> <title>Nell'estensione <link linkend="ref.bzip2">bzip2</link></title> <programlisting role="php"> <![CDATA[ <?php bzopen("", "w"); /* Warning: bzopen(): filename cannot be empty in filename on line n */ bzopen("foo", "a"); /* Warning: bzopen(): 'a' is not a valid mode for bzopen(). Only 'w' and 'r' are supported in filename on line n */ $fp = fopen("foo", "w"); bzopen($fp, "r"); /* Warning: bzopen(): cannot read from a stream opened in write only mode in filename on line n */ ?> ]]> </programlisting> </example> </para> <para> <example> <title>Nell'estensione <link linkend="ref.datetime">datetime</link></title> <programlisting role="php"> <![CDATA[ <?php strtotime("today", "now"); /* Warning: strtotime() expects parameter 2 to be long, string given in filename on line n */ /* As of PHP 5.2.1 */ new DateTime(new stdclass); /* Fatal error: Uncaught exception 'Exception' with message 'DateTime::__construct() expects parameter 1 to be string, object given' in filename:n */ ?> ]]> </programlisting> </example> </para> <para> <example> <title>Nell'estensione <link linkend="ref.dbase">dBase</link></title> <programlisting role="php"> <![CDATA[ <?php dbase_open("foo", -1); /* Warning: Invalid access mode -1 in filename on line n */ /* As of PHP 5.2.1 */ dbase_open("foo", null); /* Warning: The filename cannot be empty in filename on line n */ ?> ]]> </programlisting> </example> </para> <para> <example> <title>Nell'estensione <link linkend="ref.mcrypt">mcrypt</link></title> <programlisting role="php"> <![CDATA[ <?php $key = "this is a secret key"; $td = mcrypt_module_open('tripledes', '', 'ecb', ''); $iv = mcrypt_create_iv (mcrypt_enc_get_iv_size($td), MCRYPT_RAND); mcrypt_generic_init($td, $key, $iv); $encrypted_data = mcrypt_generic($td, ""); /* Warning: mcrypt_generic(): An empty string was passed in filename on line n */ ?> ]]> </programlisting> </example> </para> <para> <example> <title>Nell'estensione <link linkend="ref.oci8">oci8</link></title> <programlisting role="php"> <![CDATA[ <?php oci_connect("user", "pass", "db", "bogus_charset"); /* Warning: Invalid character set name: bogus_charset in filename on line n */ $oci = oci_connect("user", "pass", "db"); oci_password_change($oci, "", "old", "new"); /* Warning: username cannot be empty in filename on line n */ oci_password_change($oci, "user", "", "new"); /* Warning: old password cannot be empty in filename on line n */ oci_password_change($oci, "user", "old", ""); /* Warning: new password cannot be empty in filename on line n */ ?> ]]> </programlisting> </example> </para> <para> <example> <title>Nell'estensione <link linkend="ref.spl">SPL</link></title> <programlisting role="php"> <![CDATA[ <?php $obj = new SplFileObject(__FILE__); $obj->fgetcsv("foo"); /* Warning: SplFileObject::fgetcsv(): delimiter must be a character in filename on line n */ $obj->fgetcsv(",", "foo"); /* Warning: SplFileObject::fgetcsv(): enclosure must be a character in filename on line n */ ?> ]]> </programlisting> </example> </para> <para> <example> <title>Nell'estensione <link linkend="ref.sem">Semaphore</link> (sysvmsg)</title> <programlisting role="php"> <![CDATA[ <?php /* Warning: maximum size of the message has to be greater then zero in filename on line n */ ?> ]]> </programlisting> </example> </para> <para> <example> <title>Esempio di <link linkend="ref.zip">Zip</link> con le versioni 5.2.1 e successive</title> <programlisting role="php"> <![CDATA[ <?php $obj = new ZipArchive(); $obj->open('archive.zip'); $obj->setCommentName('', 'comment'); /* Notice: ZipArchive::setCommentName(): Empty string as entry name in filename on line n */ /* As of PHP 5.2.1 */ $obj->getCommentName(''); /* Notice: ZipArchive::getCommentName(): Empty string as entry name in filename on line n */ ?> ]]> </programlisting> </example> </para> </section> <section xml:id="migration52.datetime"> <title>Modifiche nel supporto a <link linkend="ref.datetime">datetime</link> </title> <para> Dal PHP 5.1.0, esiste una estensione <literal>date</literal> nel core del PHP. Questa è la nuova implementazione del supporto datetime di PHP. Anche se essa cerca di indovinare le impostazioni del timezone del sistema, è opportuno impostare la timezone manualmente. Questo si può fare in tre modi: </para> <itemizedlist> <listitem> <simpara> nel &php.ini; usando la direttiva INI <link linkend="ini.date.timezone">date.timezone</link> </simpara> </listitem> <listitem> <simpara> sul sistema usando la variabile d'ambiente <constant>TZ</constant> </simpara> </listitem> <listitem> <simpara> nello script usando la funzione d'utilità <link linkend="function.date-default-timezone-get"><function>date_default_timezone_set</function></link> </simpara> </listitem> </itemizedlist> <para> Tutti i <link linkend="timezones">timezone</link> accettati sono elencati nel manuale PHP. </para> <para> Con l'arrivo del PHP 5.2.x, esistono degli <type>object</type> che rappresentano date e timezone, chiamati rispettivamente DateTime e DateTimeZone. I metodi corrispondono alle funzioni procedurali esistenti. </para> </section> <section xml:id="migration52.parameters"> <title>Nuovi Parametri</title> <para> Alcune funzioni accettano nuovi parametri opzionali, in PHP 5.2.x: </para> <para>PHP Core:</para> <itemizedlist> <listitem> <simpara> <function>htmlentities</function> - aggiunto <parameter>double_encode</parameter> in PHP 5.2.3. </simpara> </listitem> <listitem> <simpara> <function>htmlspecialchars</function> - aggiunto <parameter>double_encode</parameter> in PHP 5.2.3. </simpara> </listitem> <listitem> <simpara> <function>base64_decode</function> - aggiunto <parameter>strict</parameter> </simpara> </listitem> <listitem> <simpara> <function>setcookie</function> - aggiunto <parameter>httponly</parameter> </simpara> </listitem> <listitem> <simpara> <function>setrawcookie</function> - aggiunto <parameter>httponly</parameter> </simpara> </listitem> <listitem> <simpara> <function>session_set_cookie_params</function> - aggiunto <parameter>httponly</parameter> </simpara> </listitem> <listitem> <simpara> <function>memory_get_usage</function> - aggiunto <parameter>real_usage</parameter> </simpara> </listitem> <listitem> <simpara> <function>get_loaded_extensions</function> - aggiunto <parameter>zend_extensions</parameter> in PHP 5.2.4 </simpara> </listitem> </itemizedlist> <para><link linkend="ref.curl">curl</link>:</para> <itemizedlist> <listitem> <simpara> <function>curl_multi_info_read</function> - aggiunto <parameter>msgs_in_queue</parameter> </simpara> </listitem> </itemizedlist> <para><link linkend="ref.datetime">datetime</link></para> <itemizedlist> <listitem> <simpara> <function>date</function> - aggiunto il carattere di formato "u" (milliseconds) in PHP 5.2.2 </simpara> </listitem> </itemizedlist> <para><link linkend="ref.imap">imap</link>:</para> <itemizedlist> <listitem> <simpara> <function>imap_open</function> - aggiunto <parameter>n_retries</parameter> </simpara> </listitem> <listitem> <simpara> <function>imap_reopen</function> - aggiunto <parameter>n_retries</parameter> </simpara> </listitem> </itemizedlist> <para><link linkend="ref.mbstring">mbstring</link>:</para> <itemizedlist> <listitem> <simpara> <function>mb_strrpos</function> - aggiunto <parameter>offset</parameter> </simpara> <warning> <simpara> Il parametro <parameter>offset</parameter> è stato messo nella posizione in cui stava il parametro <parameter>encoding</parameter>. La compatibilità all'indietro è stata garantita permettendo che <parameter>encoding</parameter> venga specificato come terzo parametro. L'utilizzo di questa modalità non è raccomandato in quanto verrà rimossa in una futura versione di PHP. </simpara> </warning> </listitem> </itemizedlist> <para><link linkend="ref.ming">ming</link>:</para> <itemizedlist> <listitem> <simpara> <link linkend="function.swfmovie.streammp3"><function>swfmovie::streamMP3</function></link> - aggiunto <parameter>skip</parameter> in PHP 5.2.1 </simpara> </listitem> </itemizedlist> <para><link linkend="ref.openssl">openssl</link>:</para> <itemizedlist> <listitem> <simpara> <function>openssl_verify</function> - aggiunto <parameter>signature_algo</parameter> </simpara> </listitem> </itemizedlist> <para><link linkend="ref.pgsql">pgsql</link>:</para> <itemizedlist> <listitem> <simpara> <function>pg_escape_bytea</function> - aggiunto <parameter>connection</parameter> </simpara> </listitem> <listitem> <simpara> <function>pg_escape_string</function> - aggiunto <parameter>connection</parameter> </simpara> </listitem> </itemizedlist> <para><link linkend="ref.simplexml">simplexml</link>:</para> <itemizedlist> <listitem> <simpara> <link linkend="function.simplexml-element-construct"><function>SimpleXMLElement::__construct</function></link> - aggiunto <parameter>is_prefix</parameter> </simpara> </listitem> <listitem> <simpara> <link linkend="function.simplexml-element-attributes"><function>SimpleXMLElement::attributes</function></link> - aggiunto <parameter>is_prefix</parameter> </simpara> </listitem> <listitem> <simpara> <link linkend="function.simplexml-element-children"><function>SimpleXMLElement::children</function></link> - aggiunto <parameter>is_prefix</parameter> </simpara> </listitem> <listitem> <simpara> <function>simplexml_load_file</function> - aggiunto <parameter>is_prefix</parameter> </simpara> </listitem> <listitem> <simpara> <function>simplexml_load_string</function> - aggiunto <parameter>is_prefix</parameter> </simpara> </listitem> </itemizedlist> <para><link linkend="ref.spl">spl</link>:</para> <itemizedlist> <listitem> <simpara> array iterator_to_array(Traversable it [, bool use_keys = true]) - aggiunto <parameter>use_keys</parameter> in PHP 5.2.1 </simpara> </listitem> </itemizedlist> <para><link linkend="ref.xmlreader">xmlreader</link>:</para> <itemizedlist> <listitem> <simpara> <link linkend="function.xmlreader-open"><function>XMLReader::open</function></link> - aggiunto <parameter>encoding</parameter> e <parameter>options</parameter> </simpara> </listitem> <listitem> <simpara> <link linkend="function.xmlreader-xml"><function>XMLReader::XML</function></link> - aggiunto <parameter>encoding</parameter> e <parameter>options</parameter> </simpara> </listitem> </itemizedlist> <para><link linkend="ref.xmlwriter">XMLWriter</link>:</para> <itemizedlist> <listitem> <simpara> <link linkend="function.xmlwriter-write-element"><function>XMLWriter::WriteElement</function></link> - il parametro <parameter>content</parameter> è diventato opzionale dal PHP 5.2.3 </simpara> </listitem> <listitem> <simpara> <link linkend="function.xmlwriter-write-element-ns"><function>XMLWriter::WriteElementNs</function></link> - il parametro <parameter>content</parameter> è diventato opzionale dal PHP 5.2.3 </simpara> </listitem> </itemizedlist> </section> <section xml:id="migration52.functions"> <title>Nuove Funzioni</title> <para> PHP 5.2.x ha introdotto alcune nuove funzioni: </para> <para>PHP Core:</para> <itemizedlist> <listitem> <simpara> <function>array_fill_keys</function> - Crea un array usando come chiavi gli elementi del primo parametro, ognuno inizializzato a val </simpara> </listitem> <listitem> <simpara> <function>error_get_last</function> - Recupera l'ultimo errore nella forma di un array associativo. Restituisce &null; se non è ancora avvenuto un errore </simpara> </listitem> <listitem> <simpara> <function>image_type_to_extension</function> - Get file extension for image-type returned by getimagesize, exif_read_data, exif_thumbnail, exif_imagetype </simpara> </listitem> <listitem> <simpara> <function>memory_get_peak_usage</function> - Returns the peak allocated by PHP memory </simpara> </listitem> <listitem> <simpara> <function>sys_get_temp_dir</function> - Returns directory path used for temporary files. (Added in 5.2.1) </simpara> </listitem> <listitem> <simpara> <function>timezone_abbreviations_list</function> - Returns associative array containing DST, offset and the timezone name </simpara> </listitem> <listitem> <simpara> <function>timezone_identifiers_list</function> - Returns numerically indexed array with all timezone identifiers </simpara> </listitem> <listitem> <simpara> <function>timezone_name_from_abbr</function> - Returns the timezone name from abbreviation </simpara> </listitem> <listitem> <simpara> <function>stream_socket_shutdown</function> - Causes all or part of a full-duplex connection on the socket associated with stream to be shut down. As of PHP 5.2.1. </simpara> </listitem> </itemizedlist> <para><link linkend="ref.image">Image</link>:</para> <itemizedlist> <listitem> <simpara> <function>imagegrabscreen</function> - Grabs a screenshot of the whole screen. As of PHP 5.2.2. </simpara> </listitem> <listitem> <simpara> <function>imagegrabwindow</function> - Captures a window. As of PHP 5.2.2. </simpara> </listitem> </itemizedlist> <para><link linkend="ref.mbstring">mbstring</link>:</para> <itemizedlist> <listitem> <simpara> <function>mb_list_encodings_alias_names</function> - Returns an array of all supported entity encodings </simpara> </listitem> <listitem> <simpara> <function>mb_list_mime_names</function> - Returns an array or string of all supported mime names </simpara> </listitem> <listitem> <simpara> <function>mb_stripos</function> - Finds position of first occurrence of a string within another, case insensitive </simpara> </listitem> <listitem> <simpara> <function>mb_stristr</function> - Finds first occurrence of a string within another, case insensitive </simpara> </listitem> <listitem> <simpara> <function>mb_strrchr</function> - Finds the last occurrence of a character in a string within another </simpara> </listitem> <listitem> <simpara> <function>mb_strrichr</function> - Finds the last occurrence of a character in a string within another, case insensitive </simpara> </listitem> <listitem> <simpara> <function>mb_strripos</function> - Finds position of last occurrence of a string within another, case insensitive </simpara> </listitem> <listitem> <simpara> <function>mb_strstr</function> - Finds first occurrence of a string within another </simpara> </listitem> </itemizedlist> <para><link linkend="ref.ming">ming</link> (As of PHP 5.2.1):</para> <itemizedlist> <listitem> <simpara> void ming_setSWFCompression(int num) - Sets output compression </simpara> </listitem> <listitem> <simpara> void swfmovie::namedanchor(string name) - Creates anchor </simpara> </listitem> <listitem> <simpara> void swfmovie::protect([string pasword]) - Protects </simpara> </listitem> </itemizedlist> <para><link linkend="ref.openssl">openssl</link>:</para> <itemizedlist> <listitem> <simpara> <function>openssl_csr_get_public_key</function> - Extracts public key from a CERT and prepares it for use </simpara> </listitem> <listitem> <simpara> <function>openssl_csr_get_subject</function> - Returns the subject of a CERT </simpara> </listitem> <listitem> <simpara> <function>openssl_pkey_get_details</function> - Returns an array with the key details (bits, pkey, type) </simpara> </listitem> </itemizedlist> <para><link linkend="ref.spl">spl</link>:</para> <itemizedlist> <listitem> <simpara> <function>spl_object_hash</function> - Return hash id for given object </simpara> </listitem> <listitem> <simpara> int iterator_apply(Traversable it, mixed function [, mixed params]) - Calls a function for every element in an iterator </simpara> </listitem> </itemizedlist> <para><link linkend="ref.pcre">pcre</link>:</para> <itemizedlist> <listitem> <simpara> <function>preg_last_error</function> - Returns the error code of the last regex execution </simpara> </listitem> </itemizedlist> <para><link linkend="ref.pgsql">pgsql</link>:</para> <itemizedlist> <listitem> <simpara> <function>pg_field_table</function> - Returns the name of the table field belongs to, or table's oid if oid_only is true </simpara> </listitem> </itemizedlist> <para><link linkend="ref.posix">posix</link>:</para> <itemizedlist> <listitem> <simpara> <function>posix_initgroups</function> - Calculate the group access list for the user specified in name </simpara> </listitem> </itemizedlist> <para><link linkend="ref.gmp">gmp</link>:</para> <itemizedlist> <listitem> <simpara> <function>gmp_nextprime</function> - Finds next prime of a </simpara> </listitem> </itemizedlist> <para><link linkend="ref.xmlwriter">xmlwriter</link>:</para> <itemizedlist> <listitem> <simpara> <function>xmlwriter_full_end_element</function> - End current element - returns FALSE on error </simpara> </listitem> <listitem> <simpara> <function>xmlwriter_write_raw</function> - Write text - returns FALSE on error </simpara> </listitem> <listitem> <simpara> <function>xmlwriter_start_dtd_entity</function> - Create start DTD Entity - returns FALSE on error </simpara> </listitem> <listitem> <simpara> <function>xmlwriter_end_dtd_entity</function> - End current DTD Entity - returns FALSE on error </simpara> </listitem> <listitem> <simpara> <function>xmlwriter_write_dtd_entity</function> - Write full DTD Entity tag - returns FALSE on error </simpara> </listitem> </itemizedlist> </section> <section xml:id="migration52.methods"> <title>New Methods</title> <para> New methods were introduced in 5.2.0: </para> <para><link linkend="ref.dom">dom</link>:</para> <itemizedlist> <listitem> <simpara> <link linkend="function.dom-domdocument-registernodeclass"><function>DOMDocument::registerNodeClass</function></link> - Register extended class used to create base node type </simpara> </listitem> <listitem> <simpara> <link linkend="function.dom-domelement-setidattribute"><function>DOMElement::setIDAttribute</function></link> - Declares the attribute specified by name to be of type ID </simpara> </listitem> <listitem> <simpara> <link linkend="function.dom-domelement-setidattributenode"><function>DOMElement::setIDAttributeNode</function></link> - Declares the attribute specified by node to be of type ID </simpara> </listitem> <listitem> <simpara> <link linkend="function.dom-domelement-setidattributens"><function>DOMElement::setIDAttributeNS</function></link> - Declares the attribute specified by local name and namespace URI to be of type ID </simpara> </listitem> <listitem> <simpara> DOMNode::C14N([bool exclusive [, bool with_comments [, array xpath [, array ns_prefixes]]]]) - Canonicalize nodes to a string </simpara> </listitem> <listitem> <simpara> DOMNode::C14NFile(string uri [, bool exclusive [, bool with_comments [, array xpath [, array ns_prefixes]]]]) - Canonicalize nodes to a file </simpara> </listitem> <listitem> <simpara> DOMNode::getNodePath() - Gets an xpath for a node </simpara> </listitem> </itemizedlist> <para><link linkend="ref.soap">soap</link>:</para> <itemizedlist> <listitem> <simpara> SoapServer::setObject(object obj) - Sets object which will handle SOAP requests </simpara> </listitem> </itemizedlist> <para><link linkend="ref.spl">spl</link>:</para> <itemizedlist> <listitem> <simpara> int ArrayObject::asort(void) - Sort the entries by values </simpara> </listitem> <listitem> <simpara> int ArrayObject::ksort(void) - Sort the entries by key </simpara> </listitem> <listitem> <simpara> int ArrayObject::natcasesort(void) - Sort the entries by key using case insensitive "natural order" algorithm. </simpara> </listitem> <listitem> <simpara> int ArrayObject::natsort(void) - Sort the entries by values using "natural order" algorithm. </simpara> </listitem> <listitem> <simpara> int ArrayObject::uasort(callback cmp_function) - Sort the entries by values user defined function </simpara> </listitem> <listitem> <simpara> int ArrayObject::uksort(callback cmp_function) - Sort the entries by key using user defined function. </simpara> </listitem> <listitem> <simpara> ArrayIterator AppendIterator::getArrayIterator() - Get access to inner ArrayIterator </simpara> </listitem> <listitem> <simpara> int AppendIterator::getIteratorIndex() - Get index of iterator </simpara> </listitem> <listitem> <simpara> bool CachingIterator::getCache() - Return the cache </simpara> </listitem> <listitem> <simpara> int CachingIterator::getFlags() - Return the internal flags </simpara> </listitem> <listitem> <simpara> bool CachingIterator::offsetExists(mixed index) - Return whether the requested index exists </simpara> </listitem> <listitem> <simpara> string CachingIterator::offsetGet(mixed index) - Return the internal cache if used </simpara> </listitem> <listitem> <simpara> void CachingIterator::offsetSet(mixed index, mixed newval) - Set given index in cache </simpara> </listitem> <listitem> <simpara> void CachingIterator::offsetUnset(mixed index) - Unset given index in cache </simpara> </listitem> <listitem> <simpara> void CachingIterator::setFlags() - Set the internal flags </simpara> </listitem> <listitem> <simpara> array("delimiter" =>, "enclosure" =>) SplFileObject::getCsvControl(void) - Get the delimiter and enclosure character used in fgetcsv </simpara> </listitem> <listitem> <simpara> void SplFileObject::setCsvControl([string delimiter = ',' [, string enclosure = '"']]) - Set the delimiter and enclosure character used in fgetcsv </simpara> </listitem> </itemizedlist> <para><link linkend="ref.tidy">Tidy</link></para> <itemizedlist> <listitem> <simpara> tidyNode <link linkend="function.tidynode-getparent">tidyNode::getParent(void)</link> - Returns the parent node of the current node (Added in PHP 5.2.2) </simpara> </listitem> </itemizedlist> <para><link linkend="ref.xmlreader">XMLReader</link></para> <itemizedlist> <listitem> <simpara> boolean XMLReader::setSchema(string filename) - Use W3C XSD schema to validate the document as it is processed. Activation is only possible before the first Read() </simpara> </listitem> </itemizedlist> <para><link linkend="ref.zip">zip</link>:</para> <itemizedlist> <listitem> <simpara> <link linkend="function.ziparchive-addemptydir">ZipArchive::addEmptyDir()</link> - Creates an empty directory in the archive </simpara> </listitem> </itemizedlist> </section> <section xml:id="migration52.removed-extensions"> <title>Removed Extensions</title> <para> These extensions have been moved to PECL and are no longer part of the PHP distribution. The PECL package version of these extensions will be created according to user demand. </para> <itemizedlist> <listitem> <simpara> <link linkend="ref.filepro">filePro</link> </simpara> </listitem> <listitem> <simpara> <link linkend="ref.hwapi">Hyperwave API</link> </simpara> </listitem> </itemizedlist> </section> <section xml:id="migration52.new-extensions"> <title>New Extensions</title> <para> The following are new extensions added (by default) as of PHP 5.2.0: </para> <itemizedlist> <listitem> <simpara> <link linkend="ref.filter">Filter</link> - validates and filters data, and is designed for use with insecure data such as user input. This extension is enabled by default; the default mode RAW does not impact input data in any way. </simpara> </listitem> <listitem> <simpara> <link linkend="ref.json">JSON</link> - implements the JavaScript Object Notation (JSON) data interchange format. This extension is enabled by default. </simpara> </listitem> <listitem> <simpara> <link linkend="ref.zip">Zip</link> - enables you to transparently read or write ZIP compressed archives and the files inside them. </simpara> </listitem> </itemizedlist> </section> <section xml:id="migration52.classes"> <title>New Classes</title> <para> The following classes were introduced in PHP 5.2.0: </para> <itemizedlist> <listitem> <simpara> <link linkend="ref.datetime">DateTime</link> </simpara> </listitem> <listitem> <simpara> <link linkend="ref.datetime">DateTimeZone</link> </simpara> </listitem> <listitem> <simpara> RegexIterator - extends FilterIterator; implements Iterator, Traversable, OuterIterator </simpara> <simpara> Constants: </simpara> <itemizedlist> <listitem> <simpara> <constant>RegexIterator::ALL_MATCHES</constant> </simpara> </listitem> <listitem> <simpara> <constant>RegexIterator::GET_MATCH</constant> </simpara> </listitem> <listitem> <simpara> <constant>RegexIterator::MATCH</constant> </simpara> </listitem> <listitem> <simpara> <constant>RegexIterator::REPLACE</constant> </simpara> </listitem> <listitem> <simpara> <constant>RegexIterator::SPLIT</constant> </simpara> </listitem> <listitem> <simpara> <constant>RegexIterator::USE_KEY</constant> </simpara> </listitem> </itemizedlist> <simpara> Properties: </simpara> <itemizedlist> <listitem> <simpara> public <property>replacement</property> </simpara> </listitem> </itemizedlist> <simpara> Methods: </simpara> <itemizedlist> <listitem> <simpara> RegexIterator::__construct(Iterator it, string regex [, int mode [, int flags [, int preg_flags]]]) - Create an RegexIterator from another iterator and a regular expression </simpara> </listitem> <listitem> <simpara> bool RegexIterator::accept() - Match (string)current() against regular expression </simpara> </listitem> <listitem> <simpara> bool RegexIterator::getFlags() - Returns current operation flags </simpara> </listitem> <listitem> <simpara> bool RegexIterator::getMode() - Returns current operation mode </simpara> </listitem> <listitem> <simpara> bool RegexIterator::getPregFlags() - Returns current PREG flags (if in use or &null;) </simpara> </listitem> <listitem> <simpara> bool RegexIterator::setFlags(int new_flags) - Set operation flags </simpara> </listitem> <listitem> <simpara> bool RegexIterator::setMode(int new_mode) - Set new operation mode </simpara> </listitem> <listitem> <simpara> bool RegexIterator::setPregFlags(int new_flags) - Set PREG flags </simpara> </listitem> </itemizedlist> </listitem> <listitem> <simpara> RecursiveRegexIterator </simpara> <simpara> Constants: </simpara> <itemizedlist> <listitem> <simpara> <constant>RecursiveRegexIterator::ALL_MATCHES</constant> </simpara> </listitem> <listitem> <simpara> <constant>RecursiveRegexIterator::GET_MATCH</constant> </simpara> </listitem> <listitem> <simpara> <constant>RecursiveRegexIterator::MATCH</constant> </simpara> </listitem> <listitem> <simpara> <constant>RecursiveRegexIterator::REPLACE</constant> </simpara> </listitem> <listitem> <simpara> <constant>RecursiveRegexIterator::SPLIT</constant> </simpara> </listitem> <listitem> <simpara> <constant>RecursiveRegexIterator::USE_KEY</constant> </simpara> </listitem> </itemizedlist> <simpara> Methods: </simpara> <itemizedlist> <listitem> <simpara> RecursiveRegexIterator::__construct(RecursiveIterator it, string regex [, int mode [, int flags [, int preg_flags]]]) - Create an RecursiveRegexIterator from another recursive iterator and a regular expression </simpara> </listitem> <listitem> <simpara> RecursiveRegexIterator RecursiveRegexIterator::getChildren() - Return the inner iterator's children contained in a RecursiveRegexIterator </simpara> </listitem> <listitem> <simpara> bool RecursiveRegexIterator::hasChildren() - Check whether the inner iterator's current element has children </simpara> </listitem> </itemizedlist> </listitem> </itemizedlist> </section> <section xml:id="migration52.global-constants"> <title>New Global Constants</title> <para>PHP Core:</para> <itemizedlist> <listitem> <simpara> <constant>M_EULER</constant> </simpara> </listitem> <listitem> <simpara> <constant>M_LNPI</constant> </simpara> </listitem> <listitem> <simpara> <constant>M_SQRT3</constant> </simpara> </listitem> <listitem> <simpara> <constant>M_SQRTPI</constant> </simpara> </listitem> <listitem> <simpara> <constant>PATHINFO_FILENAME</constant> </simpara> </listitem> <listitem> <simpara> <constant>PREG_BACKTRACK_LIMIT_ERROR</constant> </simpara> </listitem> <listitem> <simpara> <constant>PREG_BAD_UTF8_ERROR</constant> </simpara> </listitem> <listitem> <simpara> <constant>PREG_INTERNAL_ERROR</constant> </simpara> </listitem> <listitem> <simpara> <constant>PREG_NO_ERROR</constant> </simpara> </listitem> <listitem> <simpara> <constant>PREG_RECURSION_LIMIT_ERROR</constant> </simpara> </listitem> <listitem> <simpara> <constant>UPLOAD_ERR_EXTENSION</constant> </simpara> </listitem> <listitem> <simpara> <constant>STREAM_SHUT_RD</constant> </simpara> </listitem> <listitem> <simpara> <constant>STREAM_SHUT_WR</constant> </simpara> </listitem> <listitem> <simpara> <constant>STREAM_SHUT_RDWR</constant> </simpara> </listitem> </itemizedlist> <para><link linkend="ref.curl">curl</link>:</para> <itemizedlist> <listitem> <simpara> <constant>CURLE_FILESIZE_EXCEEDED</constant> </simpara> </listitem> <listitem> <simpara> <constant>CURLE_FTP_SSL_FAILED</constant> </simpara> </listitem> <listitem> <simpara> <constant>CURLE_LDAP_INVALID_URL</constant> </simpara> </listitem> <listitem> <simpara> <constant>CURLFTPAUTH_DEFAULT</constant> </simpara> </listitem> <listitem> <simpara> <constant>CURLFTPAUTH_SSL</constant> </simpara> </listitem> <listitem> <simpara> <constant>CURLFTPAUTH_TLS</constant> </simpara> </listitem> <listitem> <simpara> <constant>CURLFTPSSL_ALL</constant> </simpara> </listitem> <listitem> <simpara> <constant>CURLFTPSSL_CONTROL</constant> </simpara> </listitem> <listitem> <simpara> <constant>CURLFTPSSL_NONE</constant> </simpara> </listitem> <listitem> <simpara> <constant>CURLFTPSSL_TRY</constant> </simpara> </listitem> <listitem> <simpara> <constant>CURLOPT_FTP_SSL</constant> </simpara> </listitem> <listitem> <simpara> <constant>CURLOPT_FTPSSLAUTH</constant> </simpara> </listitem> <listitem> <simpara> <constant>CURLOPT_TCP_NODELAY</constant> </simpara> <simpara> Added in PHP 5.2.1. </simpara> </listitem> <listitem> <simpara> <constant>CURLOPT_TIMEOUT_MS</constant> </simpara> <simpara> Added in PHP 5.2.3 </simpara> </listitem> <listitem> <simpara> <constant>CURLOPT_CONNECTTIMEOUT_MS</constant> </simpara> <simpara> Added in PHP 5.2.3 </simpara> </listitem> </itemizedlist> <para><link linkend="ref.gmp">GMP</link>:</para> <itemizedlist> <listitem> <simpara> <constant>GMP_VERSION</constant> </simpara> <simpara> Added in PHP 5.2.2. </simpara> </listitem> </itemizedlist> <para><link linkend="ref.ming">ming</link>:</para> <itemizedlist> <listitem> <simpara> <constant>SWFTEXTFIELD_USEFONT</constant> </simpara> </listitem> <listitem> <simpara> <constant>SWFTEXTFIELD_AUTOSIZE</constant> </simpara> </listitem> <listitem> <simpara> <constant>SWF_SOUND_NOT_COMPRESSED</constant> </simpara> </listitem> <listitem> <simpara> <constant>SWF_SOUND_ADPCM_COMPRESSED</constant> </simpara> </listitem> <listitem> <simpara> <constant>SWF_SOUND_MP3_COMPRESSED</constant> </simpara> </listitem> <listitem> <simpara> <constant>SWF_SOUND_NOT_COMPRESSED_LE</constant> </simpara> </listitem> <listitem> <simpara> <constant>SWF_SOUND_NELLY_COMPRESSED</constant> </simpara> </listitem> <listitem> <simpara> <constant>SWF_SOUND_5KHZ</constant> </simpara> </listitem> <listitem> <simpara> <constant>SWF_SOUND_11KHZ</constant> </simpara> </listitem> <listitem> <simpara> <constant>SWF_SOUND_22KHZ</constant> </simpara> </listitem> <listitem> <simpara> <constant>SWF_SOUND_44KHZ</constant> </simpara> </listitem> <listitem> <simpara> <constant>SWF_SOUND_8BITS</constant> </simpara> </listitem> <listitem> <simpara> <constant>SWF_SOUND_16BITS</constant> </simpara> </listitem> <listitem> <simpara> <constant>SWF_SOUND_MONO</constant> </simpara> </listitem> <listitem> <simpara> <constant>SWF_SOUND_STEREO</constant> </simpara> </listitem> </itemizedlist> <para><link linkend="ref.openssl">openssl</link>:</para> <itemizedlist> <listitem> <simpara> <constant>OPENSSL_VERSION_NUMBER</constant> </simpara> </listitem> <listitem> <simpara> <constant>OPENSSL_VERSION_TEXT</constant> </simpara> </listitem> </itemizedlist> <para><link linkend="ref.snmp">snmp</link>:</para> <itemizedlist> <listitem> <simpara> <constant>SNMP_OID_OUTPUT_FULL</constant> </simpara> </listitem> <listitem> <simpara> <constant>SNMP_OID_OUTPUT_NUMERIC</constant> </simpara> </listitem> </itemizedlist> <para><link linkend="ref.sem">Semaphore</link>:</para> <itemizedlist> <listitem> <simpara> <constant>MSG_EAGAIN</constant> </simpara> </listitem> <listitem> <simpara> <constant>MSG_ENOMSG</constant> </simpara> </listitem> </itemizedlist> </section> <section xml:id="migration52.class-constants"> <title>New Class Constants</title> <para><link linkend="ref.pdo">pdo</link>:</para> <itemizedlist> <listitem> <simpara> <constant>PDO::ATTR_DEFAULT_FETCH_MODE</constant> </simpara> </listitem> <listitem> <simpara> <constant>PDO::FETCH_PROPS_LATE</constant> </simpara> </listitem> <listitem> <simpara> <constant>PDO::FETCH_KEY_PAIR</constant> </simpara> <simpara> Fetches a 2 column result set into an associated array. (Added in PHP 5.2.3) </simpara> </listitem> </itemizedlist> <para><link linkend="ref.spl">spl</link>:</para> <itemizedlist> <listitem> <simpara> <constant>CachingIterator::FULL_CACHE</constant> </simpara> </listitem> <listitem> <simpara> <constant>CachingIterator::TOSTRING_USE_INNER</constant> </simpara> </listitem> <listitem> <simpara> <constant>SplFileObject::READ_AHEAD</constant> </simpara> </listitem> <listitem> <simpara> <constant>SplFileObject::READ_CSV</constant> </simpara> </listitem> <listitem> <simpara> <constant>SplFileObject::SKIP_EMPTY</constant> </simpara> </listitem> </itemizedlist> </section> <section xml:id="migration52.newconf"> <title>New INI Configuration Directives</title> <para> New &php.ini; directives introduced in PHP 5.2.0: </para> <itemizedlist> <listitem> <simpara> <link linkend="ini.allow-url-include">allow_url_include</link> </simpara> <simpara> This useful option makes it possible to differentiate between standard file operations on remote files, and the inclusion of remote files. While the former is usually desirable, the latter can be a security risk if used naively. Starting with PHP 5.2.0, you can allow remote file operations while disallowing the inclusion of remote files in local scripts. In fact, this is the default configuration. </simpara> </listitem> <listitem> <simpara> <link linkend="ini.pcre.backtrack-limit">pcre.backtrack_limit</link> </simpara> <simpara> PCRE's backtracking limit. </simpara> </listitem> <listitem> <simpara> <link linkend="ini.pcre.recursion-limit">pcre.recursion_limit</link> </simpara> <simpara> PCRE's recursion limit. Please note that if you set this value to a high number you may consume all the available process stack and eventually crash PHP (due to reaching the stack size limit imposed by the Operating System). </simpara> </listitem> <listitem> <simpara> <link linkend="ini.session.cookie-httponly">session.cookie_httponly</link> </simpara> <simpara> Marks the cookie as accessible only through the HTTP protocol. This means that the cookie won't be accessible by scripting languages, such as JavaScript. This setting can effectively help to reduce identity theft through XSS attacks (although it is not supported by all browsers). </simpara> </listitem> </itemizedlist> <para> New directives in PHP 5.2.2: </para> <itemizedlist> <listitem> <simpara> <link linkend="ini.max-input-nesting-level">max_input_nesting_level</link> </simpara> <simpara> Limits how deep <link linkend="language.variables.external">input variables</link> can be nested, default is 64. </simpara> </listitem> </itemizedlist> </section> <section xml:id="migration52.errorrep"> <title>Error Reporting</title> <para> Some of the existing <constant>E_ERROR</constant> conditions have been converted to something that can be caught with a user-defined error handler. If an <link linkend="errorfunc.constants"><constant>E_RECOVERABLE_ERROR</constant></link> is not handled, it will behave in the same way as <constant>E_ERROR</constant> behaves in all versions of PHP. Errors of this type are logged as <literal>Catchable fatal error</literal>. </para> <para> This change means that the value of the <constant>E_ALL</constant> <link linkend="ini.error-reporting">error_reporting</link> constant is now 6143, where the previous value was 2047. Because PHP constants have no meaning outside of PHP, in some cases the integer value is used instead so these will need to be adjusted. So for example by setting the error_reporting mode from either the <link linkend="apache.configuration">httpd.conf</link> or the <filename>.htaccess</filename> files, the value has to be changed accordingly. The same applies when the numeric values are used rather than the constants in PHP scripts. </para> <para> As a side-effect of a change made to prevent duplicate error messages when <link linkend="ini.track-errors">track_errors</link> is <literal>On</literal>, it is now necessary to return &false; from user defined error handlers in order to populate <link linkend="reserved.variables.phperrormsg">$php_errormsg</link>. This provides a fine-grain control over the levels of messages stored. </para> </section> <section xml:id="migration52.other"> <title>Other Enhancements</title> <itemizedlist> <listitem> <simpara> Improved memory manager and increased default memory limit. </simpara> <simpara> The new memory manager allocates less memory and works faster than the previous incarnation. It allocates memory from the system in large blocks, and then manages the heap by itself. The memory_limit value in &php.ini; is checked, not for each emalloc() call (as before), but for actual blocks requested from the system. This means that memory_limit is far more accurate than it used to be, since the old memory manager didn't calculate all the memory overhead used by the malloc library. </simpara> <simpara> Thanks to this new-found accuracy memory usage may appear to have increased, although actually it has not. To accommodate this apparent increase, the default memory_limit setting was also increased - from 8 to 16 megabytes. </simpara> </listitem> <listitem> <simpara> Added support for constructors in interfaces to force constructor signature checks in implementations. </simpara> <simpara> Starting with PHP 5.2.0, interfaces can have constructors. However, if you choose to declare a constructor in an interface, each class implementing that interface MUST include a constructor with a signature matching that of the base interface constructor. By 'signature' we mean the parameter and return type definitions, including any type hints and including whether the data is passed by reference or by value. </simpara> </listitem> </itemizedlist> </section> </appendix> <!-- 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 -->