php / php/php-src

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

Offen
#20,727 4 Kommentare 0 Reaktionen 0 zugewiesene Personen Auf GitHub ansehen

@ndossche arbeitet bereits daran.

Seit 03.1.2026.

  • #20824 von @ndossche — offen
Bug Category: Engine Status: Verified
Vorherrschende Sprache
C
Sterne
40.4k
Forks
8.1k
Ø Merge
2 T. 13 Std.
Gemergte PRs (30 T.)
96

Beschreibung

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

Beitragsleitfaden

Beitragsleitfaden öffnen

Erste Schritte

  1. Lies das ganze Issue und danach den Beitragsleitfaden des Projekts.
  2. Schreib ins Issue, dass du es übernimmst — das erspart doppelte Arbeit.
  3. Forke das Repository und arbeite in einem Branch.
  4. Öffne einen Pull Request, der die Issue-Nummer nennt.

Rechercherichtung

Beginne damit, das Beispiel für header_register_callback mit mb_detect_encoding() zu reproduzieren, und vergleiche es mit der dokumentierten erwarteten leeren Ausgabe. Lies die Diskussion und den verknüpften Pull Request #20824 und überprüfe anschließend, dass der Callback nach dem Herunterfahren der Modul-Anfrage keinen Benutzercode mehr ausführt und dass die Reproduktion den fatalen Fehler nicht mehr ausgibt.

Vom Indexierungsmodell aus dem Issue-Text verfasst.

Bewertung

Tech-Stack
php
Bereich
backend
Issue-Typ
Bug
Schwierigkeit
4/5
Geschätzter Aufwand
3-5 Tage
Aktivitätsstatus
Veraltet
Klarheit
Größtenteils klar
Anfängerfreundlichkeit
25/100

Neue Issues direkt in Ihr Postfach

Eine kurze Übersicht über anfängerfreundliche GitHub-Issues.