PHP 8.6 Alpha 2: Diese drei Änderungen sollten Sie jetzt testen

PHP 8.6 Alpha 2: Diese drei Änderungen sollten Sie jetzt testen

PHP 8.6 Alpha 2 (16. Juli) bringt drei praxisrelevante Änderungen jenseits der bereits bekannten Features: verschärfte Session-Security-Defaults (use_strict_mode, cookie_httponly, cookie_samesite=Lax), konsistente ValueError/TypeError-Exceptions statt stiller Warnings in Kernfunktionen, und die Deprecation der Mbregex-Extension zugunsten von preg_*(). Einordnung nach Priorität vor dem Feature Freeze am 13. August, mit Fokus auf SSO-Flows, Error-Handling-Code und Migrationspfad.

Dennis Schwenker-Sanders 7 Min. Lesezeit

Am 16. Juli erschien PHP 8.6.0 Alpha 2. Wer meine bisherigen Artikel zu 8.6 verfolgt hat, kennt clamp(), SortDirection und die Polling API bereits. Was in Alpha 2 neu dazugekommen ist, fällt in eine andere Kategorie: Drei Änderungen, die nicht als Feature verkauft werden, aber bestehenden Code stiller brechen können als jedes neue Sprachkonstrukt. Bis zum Feature Freeze am 13. August bleibt Zeit, das im eigenen Projekt zu prüfen.

Was Sie in 8 Minuten erfahren:

  1. Warum die verschärften Session-Defaults SP-initiierte SSO-Flows und Cross-Origin-Formulare betreffen können
  2. Wo ValueError und TypeError jetzt statt stiller Warnings auftreten und was das für Ihr Error-Handling bedeutet
  3. Wie der mb_ereg_*()-Migrationspfad aussieht, bevor die Mbregex-Extension endgültig verschwindet

Der 14-tägige Alpha-Zyklus läuft planmäßig weiter: Alpha 3 am 30. Juli, Feature Freeze mit Beta 1 am 13. August, GA-Ziel am 19. November. Wie ich im Alpha-1-Realitätscheck beschrieben habe, ist das Tempo, mit dem einzelne Features landen, ein gutes Signal für die Qualität der Roadmap. Alpha 2 bestätigt das mit denselben bekannten Nice-to-haves wie grapheme_strrev(), Uri\Rfc3986\UriBuilder und dem SortDirection-Enum, die bereits in Alpha 1 sichtbar waren.

PHP 8.6 Alpha 2: Priorität nach Impact


Änderung

Kategorie

Breaking-Impact

Testen vor

Session-Security-Defaults

Sicherheit

Hoch bei permissiven Custom-Configs

Feature Freeze

ValueError/TypeError statt Warnings

Error-Handling

Mittel bis hoch, je nach Fehlerbehandlung

Feature Freeze

Mbregex-Deprecation

Migration

Niedrig kurzfristig, verpflichtend langfristig

GA (19.11.)

I/O-Polling-API, clamp(), SortDirection

Feature

Keiner, additiv

Kein Zeitdruck

Betrifft Sie das? Schnelltest in 30 Sekunden

Sofort prüfen wenn: Ihre Anwendung SP-initiierte SAML-SSO-Flows nutzt, Cross-Origin-POST-Formulare akzeptiert, oder JavaScript liest die Session-Cookie-ID aus document.cookie aus. Alle drei brechen mit den neuen Defaults.

Vor dem Feature Freeze testen wenn: Ihr Code auf stille Warnings statt geworfene Exceptions bei ungültigen Funktionsaufrufen setzt, etwa über @-Fehlerunterdrückung oder pauschale Error-Handler.

Bis GA Zeit haben wenn: Sie mb_ereg_*()-Funktionen im Einsatz haben. Die Extension ist deprecated, funktioniert aber bis zur Entfernung weiter.

Session-Konfiguration und Error-Handling schon geprüft?

Ich prüfe Ihre Codebasis gegen die neuen PHP-8.6-Defaults und zeige konkret, wo Anpassungsbedarf besteht.

  • PHP-Security-Audits aus der Praxis
  • Session- und Error-Handling-Reviews
Kostenlosen Check anfragen →

⏱️ Antwort binnen 24 Stunden

Warum die Session-Defaults der größte praktische Einschnitt sind

Die "Secure Session Configuration Defaults" RFC von Jorg Sowa wurde ohne eine einzige Gegenstimme angenommen, obwohl ein ähnlicher Vorschlag 2016 abgelehnt worden war. Sie kippt drei INI-Defaults, die seit Jahren hinter den OWASP-Empfehlungen zurücklagen.

# PHP 8.6: Geänderte Session-Defaults
session.use_strict_mode:   0 → 1   # blockiert Session-Fixation
session.cookie_httponly:   0 → 1   # JS kann Session-Cookie nicht mehr lesen
session.cookie_samesite:   "" → "Lax"  # Cookie nicht mehr bei Cross-Site-POST

# Wichtig: Diese Defaults gelten nur für NEUE Setups.
# Bereits explizit gesetzte php.ini-Werte bleiben unverändert.

use_strict_mode verhindert Session-Fixation, indem PHP eine vom Client vorgeschlagene, aber unbekannte Session-ID nicht mehr akzeptiert, sondern eine neue generiert. cookie_httponly schließt den häufigsten XSS-Payload aus, das Auslesen der Session-ID über document.cookie. cookie_samesite=Lax unterbindet den Versand des Session-Cookies bei Cross-Site-POST-Requests, was den gängigsten CSRF-Vektor kappt.

Genau hier liegt der praktische Haken. Wer SameSite=Lax als neuen Default bekommt, verliert automatisch die Cookie-Übertragung bei SP-initiierten SAML-SSO-Flows oder älteren Cross-Origin-Formular-Einreichungen, die auf das automatische Mitsenden des Session-Cookies angewiesen waren. Für diese Endpunkte muss SameSite=None; Secure jetzt explizit gesetzt werden, oder der Flow wird auf ein Token-basiertes Verfahren umgestellt.

KurzDie neuen Session-Defaults gelten nur, wenn php.ini keine expliziten Werte vorgibt. SP-initiierte SSO-Flows und Cross-Origin-Formulare mit Session-Cookie-Abhängigkeit sind die Stellen, die am ehesten brechen.

Was sich beim Error-Handling ändert

Warum werden Warnings jetzt zu Exceptions?

PHP 8.6 vereinheitlicht das Error-Handling in Kernfunktionen: Statt einer stillen Warning bei ungültigen Argumenten werfen mehr Funktionen jetzt konsistent ValueError oder TypeError. array_filter()'s $mode-Parameter etwa wirft bei einem ungültigen Wert jetzt einen ValueError, statt den Aufruf mit einer Warning stillschweigend zu ignorieren.

// PHP vor 8.6: stille Warning, Ausführung läuft weiter
// mit möglicherweise falschem Ergebnis

// PHP 8.6: klarer Fehler, der Aufruf-Stack stoppt an der Stelle
try {
    array_filter($data, $callback, mode: 999); // ungültiger Mode
} catch (\ValueError $e) {
    // Fehler ist jetzt explizit behandelbar
}

// clamp() folgt demselben Prinzip:
clamp($value, min: NAN, max: 10);
// wirft ValueError, weil NAN als Grenze ungültig ist

Was viele unterschätzen: Code, der @-Fehlerunterdrückung oder einen pauschalen set_error_handler() nutzt, um Warnings global abzufangen, sieht diese Fehler jetzt nicht mehr an derselben Stelle. Exceptions propagieren anders als Warnings, sie durchbrechen den Call-Stack, statt nur geloggt zu werden. Wer sich auf das alte Warning-Verhalten verlassen hat, etwa um fehlerhafte Eingaben stillschweigend zu ignorieren, muss das jetzt explizit mit try/catch abfangen.

KurzValueError/TypeError statt Warnings betrifft vor allem Code, der auf globale Warning-Unterdrückung setzt. Try/catch an den betroffenen Stellen ist der saubere Weg, kein pauschaler Error-Handler-Umbau.

Was der Mbregex-Deprecation-Pfad bedeutet

Die Mbregex-Extension (mb_ereg(), mb_eregi() und verwandte Funktionen) ist mit 8.6 als deprecated markiert. Die Funktionen funktionieren weiterhin, geben aber Deprecation-Notices aus. Die empfohlene Migration führt zu preg_*()-Funktionen mit dem u-Modifier für UTF-8-Verarbeitung.

// Alt: Mbregex (deprecated ab PHP 8.6)
$result = mb_ereg('^[a-zäöü]+$', $input);

// Neu: preg_* mit u-Modifier für UTF-8
$result = preg_match('/^[a-zäöü]+$/u', $input);

// Für komplexere Multibyte-Patterns ggf. \p{L}
// für Unicode-Buchstabenklassen nutzen:
$result = preg_match('/^\p{L}+$/u', $input);

Der Migrationsaufwand hängt stark davon ab, wie tief Mbregex-Funktionen im Projekt verankert sind. Für einzelne Validierungsroutinen ist der Umstieg auf preg_*() meist eine Sache von Minuten pro Stelle. Projekte mit umfangreicher Textverarbeitung, die auf Mbregex-spezifische Encoding-Behandlung angewiesen sind, sollten die Migration als eigenen Aufgabenblock einplanen, nicht als Nebenbei-Fix kurz vor GA.

⚡ PHP-8.6-Kompatibilität für Ihr Projekt testen?

Ich richte einen strukturierten Test gegen Alpha 2 ein und zeige konkret, welche der drei Prioritäten für Ihr Projekt relevant sind.

  • Session-Security-Audits und Error-Handling-Reviews
  • Mbregex-zu-preg-Migration aus der Praxis
Test einrichten →

⏱️ Antwort binnen 24 Stunden

📞 Oder direkt anrufen: 04481 - 9099658

Wie testen Sie das konkret vor dem Feature Freeze?

Wie ich im ersten Alpha-Artikel beschrieben habe, bleibt die Strategie unverändert: Ein separater CI-Job gegen die Alpha, der den Haupt-Build nicht blockiert. Für die drei Prioritäten aus Alpha 2 lohnt sich ein gezielter, zusätzlicher Test-Schritt.

# Session-Verhalten gezielt testen:
# php.ini der Test-Umgebung ohne explizite Session-Overrides laufen lassen
# und SSO-/Formular-Flows gegen die neuen Defaults prüfen

# Deprecation-Notices sichtbar machen für Mbregex-Aufrufe:
error_reporting(E_ALL);
ini_set('display_errors', '1');

# grep nach Mbregex-Funktionen im Projekt:
$ grep -rn "mb_ereg" src/

Aus der Praxis

Was mir bei PHP-Upgrade-Audits häufig begegnet: Session-Konfiguration, die vor Jahren einmal gesetzt und seitdem nie wieder angefasst wurde, oft mit expliziten, aber veralteten Werten aus einer Zeit vor den heutigen Sicherheitsempfehlungen. Die neuen 8.6-Defaults ändern an solchen expliziten Alt-Konfigurationen nichts, was gut ist für die Stabilität, aber schlecht, wenn das Team die eigentliche Absicht hinter dem Upgrade übersieht: nicht nur PHP aktualisieren, sondern die Session-Konfiguration selbst auf den aktuellen Empfehlungsstand bringen.

Zusammenfassung

PHP 8.6 Alpha 2 erschien am 16. Juli. Alpha 3 folgt am 30. Juli, Feature Freeze mit Beta 1 am 13. August, GA am 19. November.

Session-Security-Defaults: use_strict_mode, cookie_httponly und cookie_samesite=Lax werden zum Standard für neue Setups. SP-initiierte SSO-Flows und Cross-Origin-Formulare sind die kritischen Testfälle.

Error-Handling: ValueError/TypeError ersetzen stille Warnings in mehr Kernfunktionen. Code mit globaler Fehlerunterdrückung sollte gezielt geprüft werden.

Mbregex-Deprecation: Migration zu preg_*() mit u-Modifier oder \p{L}-Klassen, Zeit bis GA vorhanden.

Sie wissen, welche drei Stellen Priorität haben.

Session-Audit, Error-Handling-Review oder vollständiger Alpha-2-Test. Lassen Sie uns klären, was für Ihr Projekt vor dem 13. August ansteht.

  • PHP-Security-Audits und Session-Konfiguration
  • Feature Freeze: 13.08.2026
Nächsten Schritt klären →

Häufige Fragen

Muss ich meine php.ini sofort anpassen, wenn ich auf PHP 8.6 teste?

Nur wenn Ihre aktuelle Konfiguration keine expliziten Werte für session.use_strict_mode, session.cookie_httponly oder session.cookie_samesite setzt. In diesem Fall greifen automatisch die neuen, sichereren Defaults. Wer diese Werte bereits explizit gesetzt hat, egal ob alt oder neu, ist von der Änderung nicht betroffen, weil PHP explizite Konfiguration nie überschreibt.

Was passiert mit bestehenden Sessions beim Upgrade auf strict_mode?

Aktive Sessions, die vor dem Upgrade erstellt wurden, bleiben gültig, solange die Session-ID auf dem Server existiert. use_strict_mode wirkt nur bei neuen, vom Client vorgeschlagenen Session-IDs, die serverseitig noch nicht existieren. Ein bestehender, korrekt authentifizierter Nutzer merkt vom Upgrade nichts.

Wie erkenne ich, welche Mbregex-Aufrufe in meinem Projekt betroffen sind?

Ein einfacher grep nach mb_ereg, mb_eregi, mb_split und den verwandten Mbregex-Funktionen im Projektverzeichnis zeigt die betroffenen Stellen. Mit aktiviertem error_reporting(E_ALL) und display_errors zeigt PHP 8.6 zusätzlich Deprecation-Notices zur Laufzeit an, was tatsächlich ausgeführte Codepfade zuverlässiger aufdeckt als eine reine Textsuche.

Betrifft die ValueError/TypeError-Änderung auch Composer-Pakete von Drittanbietern?

Ja, wenn diese Pakete die betroffenen PHP-Kernfunktionen mit ungültigen Argumenten aufrufen. Ein Paket, das bisher stillschweigend mit einer Warning weiterlief, kann unter PHP 8.6 eine unbehandelte Exception werfen und den Request abbrechen. Ein Test der eigenen Composer-Dependencies gegen die Alpha ist deshalb Teil einer vollständigen Prüfung, nicht nur des eigenen Codes.

Wann genau wird die Mbregex-Extension vollständig entfernt?

Ein konkretes Entfernungsdatum ist mit der Deprecation in PHP 8.6 noch nicht kommuniziert. Deprecations in PHP durchlaufen üblicherweise mindestens eine Major-Version als Übergangsphase, bevor eine Funktion tatsächlich entfernt wird. Die Migration jetzt anzugehen, statt bis zur endgültigen Entfernung zu warten, vermeidet Zeitdruck bei einem späteren PHP-Upgrade.

Artikel teilen: