PHP

Diagnosticare Errori

Approfondimento su json_last_error() e json_last_error_msg(): come diagnosticare e interpretare gli errori durante la codifica e decodifica di dati JSON in PHP.

Durante l'uso di json_encode() e json_decode() può capitare che l'operazione fallisca. PHP fornisce due funzioni molto utili per capire la causa dell'errore:

  • json_last_error() – restituisce un codice numerico di errore.
  • json_last_error_msg() – restituisce una descrizione testuale dell'errore.

Sintassi


int json_last_error(): int
string json_last_error_msg(): string

json_last_error() restituisce un codice numerico che identifica l'errore, mentre json_last_error_msg() fornisce la descrizione leggibile dell'errore più recente avvenuto durante la codifica o decodifica JSON.


Esempio base


<?php
$json = "{nome: 'Luca', eta: 18}"; // JSON non valido
$result = json_decode($json);

if ($result === null) {
    echo "Errore JSON: " . json_last_error_msg();
}
?>

Output: Errore JSON: Syntax error


Elenco dei principali errori JSON

CodiceMessaggioDescrizione
JSON_ERROR_NONENo errorNessun errore
JSON_ERROR_DEPTHMaximum stack depth exceededProfondità massima superata
JSON_ERROR_STATE_MISMATCHUnderflow or the modes mismatchFormato JSON non coerente
JSON_ERROR_CTRL_CHARUnexpected control character foundCarattere di controllo non valido trovato
JSON_ERROR_SYNTAXSyntax errorErrore di sintassi (JSON malformato)
JSON_ERROR_UTF8Malformed UTF-8 charactersProblema di codifica UTF-8 nei caratteri
JSON_ERROR_RECURSIONRecursion detectedRiferimento circolare negli array/oggetti
JSON_ERROR_INF_OR_NANInf or NaNValore non numerico o infinito
JSON_ERROR_UNSUPPORTED_TYPEType is not supportedTipo di dato non supportato da json_encode()

Esempio pratico con gestione dell'errore


<?php
$dati = ["file" => tmpfile()]; // Risorsa non codificabile

$json = json_encode($dati);
if ($json === false) {
    echo "Errore nella codifica JSON: " . json_last_error_msg();
}
?>

Output: Errore nella codifica JSON: Type is not supported

LABORATORIO

Visualizzazione e comprensione degli errori JSON

In questo laboratorio sperimenterai diversi tipi di errori JSON per comprendere i messaggi restituiti da json_last_error_msg(). Vedrai in pratica come PHP reagisce a JSON malformati o contenenti dati non validi.


1 Creazione del file json_errori.php

Scrivi questo codice per testare vari casi di errore JSON:


<?php
$test = [
    "JSON corretto" => '{"nome":"Luca","eta":18}',
    "Errore di sintassi" => '{nome:"Luca",eta:18}',
    "Caratteri non UTF-8" => "\xB1\x31",
    "Profondità massima superata" => json_encode([[[[[[[[1]]]]]]]]),
    "Tipo non supportato" => json_encode(["f" => tmpfile()]),
];

echo "<h2>Test degli errori JSON</h2>";
echo "<table border='1' cellpadding='6'>";
echo "<tr><th>Caso</th><th>Descrizione errore</th></tr>";

foreach ($test as $nome => $json) {

    // Decodifica solo se è una stringa JSON
    if (is_string($json)) {
        json_decode($json);
    }

    echo "<tr><td><b>$nome</b></td><td>" . json_last_error_msg() . "</td></tr>";
}

echo "</table>";
?>
    

2 Analisi del risultato

Dopo l'esecuzione del file, vedrai una tabella con la colonna “Descrizione errore”. Prova ad aggiungere o modificare i casi per esplorare altri tipi di errori.