exit()
La funzione exit() in PHP termina immediatamente lo script corrente e restituisce un codice di uscita specificato.
Cosa fa la funzione exit()
La funzione exit() in PHP interrompe lo script corrente esattamente nel punto in cui viene chiamata. Nessun altro codice viene eseguito dopo di essa — lo script termina immediatamente. Viene usata più spesso per bloccare l'esecuzione dopo un redirect, quando viene rilevata una condizione fatale, o per stampare un messaggio finale prima di terminare.
exit è un costrutto del linguaggio, non una funzione ordinaria, quindi le parentesi sono facoltative: exit; ed exit(); funzionano entrambe. die() è un alias esatto di exit() — si comportano in modo identico e quale usare è puramente una questione di stile. Consulta il capitolo die() per maggiori informazioni sull'alias.
Questa pagina illustra cosa fa exit(), la differenza tra i suoi argomenti status e message, i codici di uscita restituiti alla shell e gli errori comuni da evitare.
Sintassi e argomento opzionale
exit(int|string $status = 0): neverexit() accetta un singolo argomento opzionale che può essere un intero o una string, e i due vengono trattati in modo molto diverso:
- Intero — usato come stato di uscita del processo (0–254). Non viene stampato. Per convenzione,
0significa successo e qualsiasi valore diverso da zero segnala un errore. Questo è importante quando uno script viene eseguito dalla riga di comando e un altro programma ne ispeziona il codice di uscita. - String — stampata appena prima che lo script termini, dopodiché lo stato di uscita è
0. Comodo per mostrare un messaggio di errore finale.
Se si chiama exit() senza argomenti, lo script termina con stato 0 senza stampare nulla.
Stampare un messaggio prima di terminare
Quando si passa una string, PHP la visualizza e poi si ferma:
<?php
$config = @file_get_contents('config.ini');
if ($config === false) {
exit("Fatal: config.ini could not be read.\n");
}
echo "Config loaded.\n";Se il file è mancante, lo script stampa Fatal: config.ini could not be read. e l'echo finale non viene mai eseguito.
Restituire un codice di uscita alla shell
Quando si passa un intero, non viene stampato nulla ma il valore diventa il codice di uscita del processo — utile per script eseguiti dal terminale o in una pipeline CI:
<?php
$ok = false; // pretend a check failed
if (!$ok) {
exit(1); // non-zero = failure
}
exit(0); // successEseguendo questo con php script.php e poi echo $? nella shell verrà stampato 1. Un programma chiamante può ramificarsi su quel codice senza analizzare alcun output.
Interrompere uno script dopo un redirect
Il classico caso d'uso web è garantire che nessun altro codice venga eseguito dopo l'invio di un header Location:
<?php
if (!isset($_SESSION['user'])) {
header('Location: login.php');
exit();
}
// Protected code below only runs for logged-in users.Senza exit(), PHP continuerebbe a eseguire le righe dopo il redirect — potenzialmente inviando output protetto a un utente che avrebbe dovuto essere reindirizzato alla pagina di login. Consulta header() e PHP Sessions per i componenti su cui si basa questo snippet.
Errori comuni
exit()esegue le funzioni di shutdown e i distruttori degli oggetti, ma non svuota un buffer di output avviato conob_start()se si esce a metà buffer in configurazioni più vecchie — chiudere i buffer esplicitamente quando necessario.- I codici di stato superiori a 254 sono riservati. Usare
0–254;255è usato internamente da PHP. - Non usare
exit()come normale controllo del flusso. All'interno delle funzioni, restituire un valore o lanciare un'eccezione così il chiamante può reagire. Unexit()nascosto in una funzione rende il codice difficile da testare, perché interrompe l'intero processo invece della sola chiamata. - Un argomento string non è un codice di errore.
exit("5")stampa5ed esce con stato0, mentreexit(5)esce con stato5senza stampare nulla.
Riepilogo
exit() (e il suo alias die()) termina immediatamente uno script PHP. Passare un intero per impostare lo stato di uscita della shell, o una string per stampare un messaggio finale. È ideale per bloccare l'esecuzione dopo un redirect o in caso di errore irrecuperabile, ma per la ramificazione ordinaria è preferibile usare if/else, valori di ritorno ed eccezioni, in modo che il codice rimanga testabile.