Évolutions incompatibles avec les versions précédentes
Même si l'essentiel du code PHP 5 devrait fonctionner sans modification, il faut faire attention aux situations suivantes, qui sont incompatibles avec les versions précédentes :
- Safe mode n'est plus supporté. Toute application se reposant sur ce paramètre devra être revue, notamment en termes de sécurité.
-
Magic quotes ont été supprimées. Toute application
se reposant sur ce paramètre devra être revue, notamment en termes de sécurité.
get_magic_quotes_gpc() et get_magic_quotes_runtime()
retournent désormais toujours
FALSE
. set_magic_quotes_runtime() lève une erreurE_CORE_ERROR
lorsque vous tentez d'activer les guillemets magiques. - Les directives du php.ini register_globals et register_long_arrays ont été supprimées.
- mbstring.script_encoding directives a été retiré. Préférez zend.script_encoding à la place.
- Call-time pass by reference a été supprimé.
- Les instructions break et continue n'acceptent plus de paramètre variable (exemple: break 1 + foo() * $bar;). Les arguments statiques fonctionnent toujours, par exemple break 2;. Un effet de bord de cette modification est que break 0; et continue 0; ne sont plus autorisés.
-
Dans l'extension Date et Heure, le fuseau ne peut plus
être défini au moyen de la variable d'environnement TZ. Vous devez préciser un fuseau horaire
en utilisant l'option de php.ini date.timezone ou
la fonction date_default_timezone_set().
PHP n'essayera plus de deviner le fuseau horaire et utilisera par défaut "UTC" tout en
émettant une alerte de niveau
E_WARNING
. -
Les index de tableaux non numériques concernant les chaines - exemple: $a['foo'] où $a est une chaine -
retournent maintenant false sur un isset() et true sur un empty(), et produisent
une alerte de niveau
E_WARNING
si vous les utilisez. Les index de type flottant, bool et null produisent une alerte de niveauE_NOTICE
. Les index de type chaine numérique (exemple: $a['2']) fonctionnent comme avant. Notez que les index tels que '12.3' et '5 foobar' sont considérés comme non-numériques et produisent une alerte de niveauE_WARNING
, mais sont convertis vers 12 et 5 respectivement, pour des raisons de compatibilité. Note : Le code suivant retourne un résultat différent. $str='abc';var_dump(isset($str['x'])); // false en PHP 5.4 ou supérieure, mais true en 5.3 ou inférieure -
Convertir un tableau en chaine génère maintenant une erreur
E_NOTICE
, mais le résultat du transtypage reste le même : la chaine "Array". -
Transformer
NULL
,FALSE
, ou une chaine vide en objet en lui ajoutant un attribut génère maintenant une erreurE_WARNING
, au lieu deE_STRICT
. - Des noms de paramètres qui masqueraient une super globale entrainent désormais une erreur fatale. Ceci interdit du code comme celui-ci : function foo($_GET, $_POST) {}.
- Les algorithmes de hash Salsa10 et Salsa20 ont été retirés.
- L'algorithme de hash Tiger utilise maintenant l'ordre des octets big-endian. Suivre cet exemple pour écrire un code compatible avec PHP 5.3 et PHP 5.4.
-
array_combine() retourne maintenant array() au lieu de
FALSE
lorsque vous lui passez deux tableaux vides comme paramètres. -
Si vous utilisez htmlentities() avec un jeu de caractères asiatique, elle
fonctionnera comme htmlspecialchars() - ça a toujours été le cas avec les
versions précédentes de PHP, mais maintenant, une erreur
E_STRICT
sera levée. -
Le troisième paramètre de la fonction ob_start()
a changé de type passant d'un booléen nommé
erase
à un entier nomméflags
. Notez que la code qui définit explicitement le paramètreerase
àFALSE
ne fonctionnera plus comme attendu en PHP 5.4 : veuillez suivre cet exemple afin d'écrire du code compatible avec PHP 5.3 et 5.4.
Les mots-clé suivants sont maintenant réservés, et ne peuvent plus être utilisés dans les noms de fonctions, de classes, etc.
Les fonctions suivantes ont été supprimées :
- define_syslog_variables()
- import_request_variables()
- session_is_registered(), session_register() et session_unregister().
- Les alias mysqli_bind_param(), mysqli_bind_result(), mysqli_client_encoding(), mysqli_fetch(), mysqli_param_count(), mysqli_get_metadata(), mysqli_send_long_data(), mysqli::client_encoding(), et mysqli_stmt::stmt().
Version en cache
05/11/2024 17:17:57 Cette version de la page est en cache (à la date du 05/11/2024 17:17:57) afin d'accélérer le traitement. Vous pouvez activer le mode utilisateur dans le menu en haut pour afficher la dernère version de la page.Document créé le 30/01/2003, dernière modification le 26/10/2018
Source du document imprimé : https://www.gaudry.be/php-rf-migration54.incompatible.html
L'infobrol est un site personnel dont le contenu n'engage que moi. Le texte est mis à disposition sous licence CreativeCommons(BY-NC-SA). Plus d'info sur les conditions d'utilisation et sur l'auteur.
Références
Ces références et liens indiquent des documents consultés lors de la rédaction de cette page, ou qui peuvent apporter un complément d'information, mais les auteurs de ces sources ne peuvent être tenus responsables du contenu de cette page.
L'auteur de ce site est seul responsable de la manière dont sont présentés ici les différents concepts, et des libertés qui sont prises avec les ouvrages de référence. N'oubliez pas que vous devez croiser les informations de sources multiples afin de diminuer les risques d'erreurs.