php / php/php-src

User code can run after module request shutdown via the output layer

Ouverte
#20,727 4 commentaires 0 réactions 0 personnes assignées Voir sur GitHub

@ndossche y travaille déjà.

Depuis le 3/1/2026.

  • #20824 par @ndossche — ouverte
Bug Category: Engine Status: Verified
Langage dominant
C
Étoiles
40.4k
Forks
8.1k
Merge moyen
2 j 13 h
PR mergées (30 j)
96

Description

Description

The following code:

<?php
header_register_callback( fn() => mb_detect_encoding('foo') );

Resulted in this output:

Fatal error: Uncaught ValueError: mb_detect_encoding(): Argument #2 ($encodings) must specify at least one encoding in /in/0EDPU:2
Stack trace:
#0 /in/0EDPU(2): mb_detect_encoding('foo')
#1 [internal function]: {closure:/in/0EDPU:2}()
#2 {main}
  thrown in /in/0EDPU on line 2

But I expected this output instead:

The error seems to be present since PHP 8.0.0
https://3v4l.org/0EDPU

The error also occurs when mb_convert_encoding() is called instead of mb_detect_encoding().

Workaround

Setting mbstring.detect_order explicitly in php.ini prevents the error:

; php.ini
mbstring.detect_order = "ASCII,UTF-8";

Setting the order with mb_detect_order() inside the callback also prevents the issue:

header_register_callback( function() {
    mb_detect_order(['ASCII', 'UTF-8']);
    mb_detect_encoding('foo');
} );

Setting the order outside of the callback or setting it with ini_set() did not prevent the error.

PHP Version
PHP 8.4.15 (cli) (built: Dec  8 2025 22:51:21) (NTS)
Copyright (c) The PHP Group
Built by https://github.com/docker-library/php
Zend Engine v4.4.15, Copyright (c) Zend Technologies
    with Zend OPcache v8.4.15, Copyright (c), by Zend Technologies
    with Xdebug v3.5.0, Copyright (c) 2002-2025, by Derick Rethans
Operating System

No response

Guide de contribution

Ouvrir le guide de contribution

Par où commencer

  1. Lisez l'issue en entier, puis le guide de contribution du projet.
  2. Signalez en commentaire que vous la prenez — cela évite que deux personnes fassent le même travail.
  3. Forkez le dépôt et travaillez sur une branche.
  4. Ouvrez une pull request qui référence le numéro de l'issue.

Piste de recherche

Commencez par reproduire l’exemple de header_register_callback avec mb_detect_encoding() et comparez-le à la sortie vide attendue documentée. Lisez la discussion et la pull request #20824 associée, puis vérifiez que le callback n’exécute plus de code utilisateur après l’arrêt de la requête du module et que la reproduction n’émet plus l’erreur fatale.

Rédigé par le modèle d'indexation à partir du texte de l'issue.

Évaluation

Stack technique
php
Domaine
backend
Type d'issue
Bug
Difficulté
4/5
Temps estimé
3-5 jours
Activité
À l'abandon
Clarté
Plutôt claire
Accessibilité débutants
25/100

Recevez les nouvelles issues par e-mail

Un résumé court des issues GitHub adaptées aux débutants.