Signatur
Beschreibung
simdjson_is_valid() validiert einen JSON-String mithilfe der hochperformanten simdjson-Bibliothek, die moderne SIMD-CPU-Instruktionen (AVX2, SSE4.2, NEON) nutzt, um JSON deutlich schneller zu verarbeiten als die klassische json_decode()-Funktion. Das Ergebnis ist ein einfaches true oder false – ideal für Vorprüfungen, bevor aufwändiges Dekodieren stattfindet.
Im Vergleich zu json_validate() (eingeführt in PHP 8.3) oder dem Muster json_decode() + json_last_error() bietet diese Funktion durch die SIMD-Optimierung eine erheblich bessere Leistung bei großen JSON-Dokumenten oder bei hohem Durchsatz in Web-APIs und Datenpipelines.
Typische Einsatzgebiete sind die Validierung von API-Anfragen, das Prüfen von JSON-Nutzlasten aus Nachrichtenwarteschlangen (z. B. RabbitMQ, Kafka) sowie das schnelle Aussortieren ungültiger Eingaben vor dem eigentlichen Verarbeitungsschritt.
Die Funktion gehört zur PECL-Erweiterung simdjson und muss daher explizit installiert und in der php.ini aktiviert werden. Sie setzt eine CPU voraus, die SIMD-Befehle unterstützt; auf älteren oder eingebetteten Systemen fällt die Bibliothek auf einen Fallback-Parser zurück.
Parameter
| Name | Typ | Default | Beschreibung |
|---|---|---|---|
| $json Pflicht | string | Der zu prüfende JSON-String. | |
| $depth | int | 512 | Maximale Verschachtelungstiefe des JSON-Dokuments. Dokumente, die tiefer verschachtelt sind, gelten als ungültig. Der Wert muss > 0 und <= 2147483647 sein. |
| $options | int | 0 | Reserviertes Optionen-Bitmuster für zukünftige Erweiterungen. Derzeit wird nur 0 unterstützt. |
Rückgabewert
true zurück, wenn der übergebene String ein syntaktisch gültiges JSON-Dokument ist, andernfalls false. Bei einem Fehler aufgrund ungültiger Parameter (z. B. depth <= 0) wird eine RuntimeException geworfen.Beispiele
Einfache Validierung eines JSON-Strings
<?php
$valid = '{"name": "Alice", "age": 30}';
$invalid = '{name: Alice}';
var_dump(simdjson_is_valid($valid)); // true
var_dump(simdjson_is_valid($invalid)); // false
Validierung vor dem Dekodieren einer API-Anfrage
<?php
// Simulierter HTTP-Request-Body
$body = file_get_contents('php://input') ?: '{"user":"bob","action":"login"}';
if (!simdjson_is_valid($body)) {
http_response_code(400);
echo json_encode(['error' => 'Ungültiger JSON-Body']);
exit;
}
$data = simdjson_decode($body, true);
echo 'Benutzer: ' . htmlspecialchars($data['user']);
Maximale Verschachtelungstiefe begrenzen
<?php
// Stark verschachteltes JSON erzeugen
$nested = str_repeat('{"a":', 20) . '1' . str_repeat('}', 20);
// Standard-Tiefe 512 – gültig
var_dump(simdjson_is_valid($nested)); // true
// Eigene Tiefenbeschränkung auf 5
var_dump(simdjson_is_valid($nested, 5)); // false
// Wichtig · Fallstricke
Installation: Die Funktion ist nicht Teil des PHP-Kerns. Installation via PECL: pecl install simdjson, anschließend extension=simdjson in der php.ini aktivieren.
Sicherheit: Da die Funktion nur validiert und nicht dekodiert, gibt es kein Risiko durch tiefe Rekursion beim eigentlichen Parsen. Dennoch sollte die depth-Begrenzung auf praxisnahe Werte gesetzt werden, um DoS-Angriffe durch extrem tief verschachtelte JSON-Nutzlasten zu erschweren.
Kompatibilität: Auf CPUs ohne SIMD-Unterstützung (z. B. sehr alte x86-32-Bit-Systeme oder bestimmte ARM-Varianten) fällt simdjson automatisch auf einen kompatiblen, aber langsameren Fallback-Pfad zurück.
Alternative ab PHP 8.3: json_validate() erfüllt denselben Zweck ohne externe Erweiterung, ist aber typischerweise langsamer als simdjson.