FrankenPHP 1.13.2 a été publié le 21 octobre 2026. Les images Docker embarquent désormais PHP 8.2.35, 8.3.36, 8.4.27 et 8.5.12. Les binaires statiques utilisent PHP 8.5.12. Ces versions corrigent PHP2Shell, identifié par CVE-2026-109618 et CVE-2026-109619. Ces deux failles critiques permettent une exécution de code à distance sans authentification. Les notes de version indiquent qu'une mise à niveau est la seule correction complète.
Quatre autres vulnérabilités de FrankenPHP sont corrigées. Une faille de gravité élevée dans l'extraction des applications intégrées, référencée GHSA-6q3j-62j9-f9hh, permettait à un utilisateur local de créer un répertoire prévisible dans le dossier temporaire partagé. Le service pouvait alors exécuter le code PHP placé à cet endroit. FrankenPHP extrait maintenant les applications de manière atomique dans un répertoire propre à l'utilisateur. Un répertoire existant n'est réutilisé que si l'utilisateur courant en est propriétaire.
Les requêtes en attente d'un thread PHP sont abandonnées lorsque le client se déconnecte. Auparavant, un client non authentifié pouvait saturer le pool de threads en mettant des requêtes en file avant de fermer la connexion. Cette faille porte la référence GHSA-fq24-r53r-xcx3.
Les tableaux PHP qui se référencent eux-mêmes sont désormais refusés lors de leur conversion en valeurs Go. Avant ce correctif, un tel tableau transmis à `frankenphp_log()`, renvoyé par un callback de worker ou fourni à l'API d'extension pouvait provoquer un dépassement de pile et faire tomber le processus. La référence est GHSA-ccgp-ch9h-533f. En mode worker, `error_get_last()` et `libxml_get_errors()` sont vidés après chaque requête. Des fragments de l'entrée du client précédent et des chemins du serveur ne peuvent ainsi plus apparaître dans la requête suivante. Cette faille est référencée GHSA-4gfw-9v29-gp9h.
`frankenphp_log()` et les constantes `FRANKENPHP_LOG_LEVEL_*` sont maintenant disponibles dans `php-cli`. Les messages reprennent le format du serveur et sont écrits sur stderr. Le Caddyfile n'est pas chargé lors d'une exécution en CLI, donc ses directives de journalisation ne s'appliquent pas. La fonction d'extension `frankenphp_thread_index()` est de nouveau exportée pour des extensions C comme `frankenstate` et `frankenasync`.
Les builds statiques utilisent maintenant static-php-cli v3. Sur macOS, les binaires ne sont publiés que pour Apple Silicon. L'artefact `frankenphp-mac-x86_64` disparaît donc. Les utilisateurs de Mac Intel doivent compiler depuis les sources avec `build-static.sh`. Le binaire `-gnu` exige désormais glibc 2.28 ou une version plus récente, contre 2.17 auparavant.
Les images utilisées pour créer les builds statiques reçoivent maintenant `PHP_EXTENSIONS`, `PHP_EXTENSION_LIBS`, `XCADDY_ARGS` et les autres options comme variables d'environnement transmises à `docker run`. Elles ne passent plus par des arguments de build Docker. Le binaire est écrit dans le répertoire monté `/output`, et les valeurs par défaut se trouvent dans `craft.yml`. La documentation des builds statiques a été mise à jour.
Lorsque `hot_reload` est configuré, `opcache.revalidate_freq` vaut désormais 0 par défaut. Une page modifiée ne devrait ainsi plus être servie depuis un cache obsolète. Les valeurs définies dans `php.ini`, `PHP_INI_SCAN_DIR` ou avec la directive `php_ini` restent prioritaires. Caddy convertit maintenant les limites de threads et de requêtes en entiers. Sur `linux/386`, `linux/arm/v6` et `linux/arm/v7`, une valeur hors limites produit une erreur au lieu de devenir négative. `max_threads 4294967295` ne déclenche donc plus le mode automatique.
Le fichier d'en-tête `types.h` des builds statiques devient `frankenphp_types.h`, car un en-tête libwebp portant le même nom pouvait casser la compilation. La documentation explique désormais comment publier des mises à jour Mercure depuis `php-cli` via le point d'entrée POST du hub. Elle précise aussi pourquoi la détection de `mercure_publish()` pendant le préchauffage du cache désactive cette fonction dans le serveur web.
La version corrige également la traduction russe. @chubakur a effectué sa première contribution dans #2712, et @zaccesss dans #2726. Les premières contributions de @nickchomey et @sergehardy figurent respectivement dans #2717 et #1926.




Commentaires
Pas encore de commentaire — écris le premier.
Lance la discussion
Pas de compte ni de mot de passe — saisis simplement ton adresse e-mail et nous t’envoyons un lien de connexion à usage unique. Première visite ? Tout se met en place automatiquement.
Ton évaluation sera appliquée automatiquement après ta connexion.
Vérifie ta boîte mail
Nous avons envoyé un lien de connexion à …. Ouvre-le sur cet appareil — cet onglet te connectera automatiquement.
Rien reçu ? Vérifiez le dossier spam — et marquez le message « Non spam » pour qu'il arrive directement la prochaine fois.