PHP 7.4.9 Released!

Autres changements

Amélioration des Performances

Cœur de PHP

Un opcode de VM spécialisé pour la fonction array_key_exists() a été ajouté, ceci améliore les performances de cette fonction si elle peut être résolue statiquement. Dans du code sous un espace de nom, ceci peut nécessité d'écrire \array_key_exists() ou importer explicitement la fonction.

Expression Régulières (Compatible Perl)

Quand preg_match() en mode UTF-8 (modificateur "u") est appelée à plusieurs reprises sur la même chaîne de caractères (mais posiblement différentes positions), elle ne sera vérifiée qu'une seule fois pour la validité UTF-8.

Modifications Apportées à la Gestion de Fichiers INI

zend.exception_ignore_args est une nouvelle directive INI pour inclure ou exclure les arguments des traces de pile généré par les exceptions.

opcache.preload_user est une nouvelle directive INI permettant de spécifier le compte utilisateur ayant pour rôle d'exécuter le code pré-chargé (l'utilisateur root n'est pas autorisé pour des raisons de sécurité).

Migration vers pkg-config

Un nombre d'extension ont été migré pour utiliser exclusivement pkg-config pour la détection des dépendances de bibliothèques. Généralement, ceci signifie qu'au lieu d'utiliser --with-foo-dir=DIR ou similaire seul --with-foo est utilisé. Les chemins de bibliothèques personalisés peuvent être spécifié soit en ajoutant des dossiers supplémentaires à PKG_CONFIG_PATH soit en spécifiant les options de compilations explicitement à travers FOO_CFLAGS et FOO_LIBS.

Les extensions et SAPIs suivants sont affectées :

  • CURL :
    • --with-curl n'accepte plus un dossier.
  • Enchant :
    • --with-enchant n'accepte plus un dossier.
  • FPM :
    • --with-fpm-systemd utilise désormais uniauement pkg-config pour les vérifications libsystem. La version minimale libsystemd requise est 209.
  • GD :
    • --with-gd devient --enable-gd (pour activer l'extension) et --with-external-gd (pour opter pour l'utilisation d'un libgd externe, plutôt que celui fourni).
    • --with-png-dir a été supprimé. libpng est requis.
    • --with-zlib-dir a été supprimé. zlib est requis.
    • --with-freetype-dir devient --with-freetype
    • --with-jpeg-dir devient --with-jpeg
    • --with-webp-dir devient --with-webp
    • --with-xpm-dir devient --with-xpm
  • IMAP :
    • --with-kerberos-systemd n'accepte plus un dossier.
  • Intl :
    • --with-icu-dir a été supprimé. Si --enable-intl est passé, alors libicu est toujours requis.
  • LDAP :
    • --with-ldap-sasl n'accepte plus un dossier.
  • Libxml :
    • --with-libxml-dir a été supprimé.
    • --enable-libxml devient --with-libxml.
    • --with-libexpat-dir a été renommé en --with-expat et n'accepte plus un dossier.
  • Litespeed :
    • --with-litespeed devient --enable-litespeed.
  • Mbstring :
    • --with-onig a été supprimé. Suf si --disable-mbregex a été passé, libonig est requis.
  • ODBC :
    • --with-iodbc n'accepte plus un dossier.
    • --with-unixODBC sans un dossier utilise désormais phg-config (préférable). Le dossier est toujours accepté pour les anciennes versions sans libodbc.pc.
  • OpenSSL :
    • --with-openssl n'accepte plus un dossier.
  • PCRE :
    • --with-pcre-regex a été supprimé. À la place --with-external-pcre est offert pour opter pour l'utilisation d'une bibliothèque PCRE externe, plutôt que celle fourni.
  • PDO_SQLite :
    • --with-pdo-sqlite n'accepte plus un dossier.
  • Readline :
    • --with-libedit n'accepte plus un dossier.
  • Sodium :
    • --with-sodium n'accepte plus un dossier.
  • SQLite3 :
    • --with-sqlite3 n'accepte plus un dossier.
  • XSL :
    • --with-xsl n'accepte plus un dossier.
  • Zip :
    • --with-libzip a été supprimé.
    • --enable-zip devient --with-zip.

Échappement CSV

fputcsv(), fgetcsv(), SplFileObject::fputcsv(), SplFileObject::fgetcsv(), et SplFileObject::setCsvControl() acceptent désormais une chaîne de caractères vide en tant qu'argument $escape, qui désactive le mécanisme d'échappement propriétaire de PHP.

Le comportement de str_getcsv() a été ajusté par conséquent has been (auparavant, une chaîne de caractères vide était identique à utiliser les valeurs par défault).

SplFileObject::getCsvControl() peut, par conséquent désormais aussi retourner une chaîne de caractères vide pour le troisième élément du tableau.

Filtration de Données

L'extension filter n'expose plus --with-pcre-dir pour les builds Unix qui peut désormais être compilé de manière fiable en tant que partagé lors de l'utilisation de ./configure

GD

Le comportement de imagecropauto() dans la bibliothèque libgd fourni a été synchronisé avec celle de libgd système :

  • IMG_CROP_DEFAULT ne se replie plus sur IMG_CROP_SIDES
  • Le seuil-recadrage (Threshold-cropping) utilise désormais l'algorithme de libgd système.

La paramètre par défaut $mode de imagecropauto() a été modifié en IMG_CROP_DEFAULT ; fournir -1 est désormais obsolète.

imagescale() supporte désormais la préservation du rapport hauteur / largeur lors de la mise à échelle à une hauteur fixe en passant -1 à $new_width.

HASH Message Digest Framework

L'extension hash ne peut plus être désactivé et est toujours une part intégrale de n'importe quel build PHP, similaire à l'extension date.

Intl

L'extension intl requis désormais au moins ICU 50.1.

ResourceBundle implémente désormais Countable.

Lightweight Directory Access Protocol (LDAP)

Support pour nsldap et umich_ldap ont été supprimées.

Libxml

Toutes les extensiosn basées sur libxml nécessite lib 2.7.6 ou ultérieur.

Chaînes Multi-octet

La bibliothèque oniguruma n'est plus fourni avec PHP, à la place libonig doit être disponible sur le système. Alternativement --disable-mbregex peut être utilisé pour désactiver le composant mbregex.

OPcache

Les options de configurations --disable-opcache-file et --enable-opcache-file ont été supprimées en faveur de la directive INI opcache.file_cache.

Hachage de Mot de Passe

Les fonctions password_hash() et acceptent désormais des chaîne de caractères et entier nullable pour l'arguement $algo.

PEAR

L'installation de PEAR (inclus PECL) n'est plus activé par défault. Ceci peut être explicitement activé en utilisant --with-pear. Cette option est obsolète et pourra être supprimée dans le futur.

Reflection

Les valeurs numériques des consantes de modificateur (IS_ABSTRACT, IS_DEPRECATED, IS_EXPLICIT_ABSTRACT, IS_FINAL, IS_IMPLICIT_ABSTRACT, IS_PRIVATE, IS_PROTECTED, IS_PUBLIC, et IS_STATIC) sur les classes ReflectionClass, ReflectionFunction, ReflectionMethod, ReflectionObject, et ReflectionProperty ont été modifié.

SimpleXML

SimpleXMLElement implémente désormais Countable.

SQLite3

La bibliothèque libsqlite intégré a été supprimée. Pour compilier l'extension SQLite3 une libsqlite3 ≥ 3.7.4 système est désormais requis. Pour compiler l'extension PDO_SQLite une libsqlite3 ≥ 3.5.0 système est désormais requis.

La linéarisation et délinéarisation de SQLite3, SQLite3Stmt et SQLite3Result est désormais explicitement interdit. Auparavent, la linéarisation d'instances de ces classes étaient possible, mais la dénéarisation générait des objets inutilisables.

La notation @param peut désormais être utilisé pour dénoter les paramètres de requête SQL.

Zip

La bibliothèque libzip intégré a été supprimée. Une libzip >= 0.11 système est désormais requis pour compiler l'extension zip.

add a note add a note

User Contributed Notes 3 notes

up
1
Florent H (Sowapps)
5 months ago
This version brings an important changes with the directive zend.exception_ignore_args set to On by default.
In all stack traces, the args key is now missing.
All php frameworks have to handle this to report errors & exceptions.
up
0
santi at mola dot io
7 days ago
Note for internals/extensions:

Many opcode values changed between PHP 7.3 and 7.4, so most documentation resources are outdated in that regard. You can look the definitions at Zend/zend_vm_opcodes.h in php-src. For example, ZEND_ECHO changes from 40 to 136.

While opcode changes happen in a lot of PHP versions, the change in 7.4 is quite significant.
up
0
ohcc at 163 dot com
1 month ago
As of PHP 7.4, an exception thrown within the user-defined shutdown function can be caught by the user-defined exception handler.

<?php
    set_error_handler
(
        function(
$level, $error, $file, $line){
            if(
0 === error_reporting()){
                return
false;
            }
            throw new
ErrorException($error, -1, $level, $file, $line);
        },
       
E_ALL
   
);

   
register_shutdown_function(function(){
       
$error = error_get_last();
        if(
$error){
            throw new
ErrorException($error['message'], -1, $error['type'], $error['file'], $error['line']);
        }
    });

   
set_exception_handler(function($exception){
       
// ... more code ...
   
});  
  
    require
'NotExists.php';
To Top