PHP - Gestione errori ed eccezioni

La gestione degli errori è il processo di rilevamento degli errori sollevati dal programma e quindi di intraprendere l'azione appropriata. Se gestisci correttamente gli errori, ciò potrebbe portare a molte conseguenze impreviste.

È molto semplice in PHP gestire un errore.

Utilizzando la funzione die ()

Durante la scrittura del programma PHP è necessario verificare tutte le possibili condizioni di errore prima di procedere e intraprendere le azioni appropriate quando necessario.

Prova a seguire l'esempio senza averlo /tmp/test.xt file e con questo file.

<?php
   if(!file_exists("/tmp/test.txt")) {
      die("File not found");
   }else {
      $file = fopen("/tmp/test.txt","r");
      print "Opend file sucessfully";
   }
   // Test of the code here.
?>

In questo modo puoi scrivere un codice efficiente. Usando la tecnica sopra è possibile interrompere il programma ogni volta che si verifica un errore e visualizzare un messaggio più significativo e intuitivo.

Definizione della funzione di gestione degli errori personalizzata

Puoi scrivere la tua funzione per gestire qualsiasi errore. PHP fornisce un framework per definire la funzione di gestione degli errori.

Questa funzione deve essere in grado di gestire un minimo di due parametri (livello di errore e messaggio di errore) ma può accettare fino a cinque parametri (facoltativamente: file, numero di riga e contesto dell'errore) -

Sintassi

error_function(error_level,error_message, error_file,error_line,error_context);

Suor n Parametro e descrizione
1

error_level

Obbligatorio: specifica il livello del report di errore per l'errore definito dall'utente. Deve essere un numero di valore.

2

error_message

Obbligatorio: specifica il messaggio di errore per l'errore definito dall'utente

3

error_file

Facoltativo: specifica il nome del file in cui si è verificato l'errore

4

error_line

Facoltativo: specifica il numero di riga in cui si è verificato l'errore

5

error_context

Facoltativo: specifica un array contenente ogni variabile e i relativi valori in uso quando si è verificato l'errore

Possibili livelli di errore

Questi livelli di rapporto di errore sono i diversi tipi di errore per cui può essere utilizzato il gestore degli errori definito dall'utente. Questi valori vengono utilizzati in combinazione utilizzando| operatore

Suor n Costante e descrizione Valore
1

.E_ERROR

Errori irreversibili in fase di esecuzione. L'esecuzione dello script viene interrotta

1
2

E_WARNING

Errori di runtime non irreversibili. L'esecuzione dello script non viene interrotta

2
3

E_PARSE

Errori di analisi in fase di compilazione. Gli errori di analisi dovrebbero essere generati solo dal parser.

4
4

E_NOTICE

Avvisi in fase di esecuzione. Lo script ha trovato qualcosa che potrebbe essere un errore, ma potrebbe anche accadere durante l'esecuzione di uno script normalmente

8
5

E_CORE_ERROR

Errori irreversibili che si verificano durante l'avvio iniziale di PHP.

16
6

E_CORE_WARNING

Errori di runtime non irreversibili. Ciò si verifica durante l'avvio iniziale di PHP.

32
7

E_USER_ERROR

Errore irreversibile generato dall'utente. È come un E_ERROR impostato dal programmatore utilizzando la funzione PHP trigger_error ()

256
8

E_USER_WARNING

Avviso non irreversibile generato dall'utente. Questo è come un E_WARNING impostato dal programmatore utilizzando la funzione PHP trigger_error ()

512
9

E_USER_NOTICE

Avviso generato dall'utente. È come un E_NOTICE impostato dal programmatore utilizzando la funzione PHP trigger_error ()

1024
10

E_STRICT

Avvisi in fase di esecuzione. Abilita per fare in modo che PHP suggerisca modifiche al codice che garantiranno la migliore interoperabilità e compatibilità con le versioni successive del codice.

2048
11

E_RECOVERABLE_ERROR

Errore irreversibile catturabile. È come un E_ERROR ma può essere catturato da un handle definito dall'utente (vedere anche set_error_handler ())

4096
12

E_ALL

Tutti gli errori e gli avvisi, eccetto il livello E_STRICT (E_STRICT farà parte di E_ALL a partire da PHP 6.0)

8191

Tutto il livello di errore sopra può essere impostato utilizzando la seguente funzione di libreria incorporata in PHP dove il livello cab è uno qualsiasi dei valori definiti nella tabella sopra.

int error_reporting ( [int $level] )

Di seguito è riportato il modo in cui è possibile creare una funzione di gestione degli errori:

<?php
   function handleError($errno, $errstr,$error_file,$error_line) {
      echo "<b>Error:</b> [$errno] $errstr - $error_file:$error_line";
      echo "<br />";
      echo "Terminating PHP Script";
      
      die();
   }
?>

Una volta definito il gestore degli errori personalizzato, è necessario impostarlo utilizzando la libreria incorporata di PHP set_error_handlerfunzione. Ora esaminiamo il nostro esempio chiamando una funzione che non esiste.

<?php
   error_reporting( E_ERROR );
   
   function handleError($errno, $errstr,$error_file,$error_line) {
      echo "<b>Error:</b> [$errno] $errstr - $error_file:$error_line";
      echo "<br />";
      echo "Terminating PHP Script";
      
      die();
   }
   
   //set error handler
   set_error_handler("handleError");
   
   //trigger error
   myFunction();
?>

Gestione delle eccezioni

PHP 5 ha un modello di eccezione simile a quello di altri linguaggi di programmazione. Le eccezioni sono importanti e forniscono un migliore controllo sulla gestione degli errori.

Spieghiamo qui la nuova parola chiave relativa alle eccezioni.

  • Try- Una funzione che utilizza un'eccezione dovrebbe trovarsi in un blocco "try". Se l'eccezione non si attiva, il codice continuerà normalmente. Tuttavia, se l'eccezione si attiva, viene "generata" un'eccezione.

  • Throw- Ecco come si attiva un'eccezione. Ogni "lancio" deve avere almeno una "presa".

  • Catch - Un blocco "catch" recupera un'eccezione e crea un oggetto contenente le informazioni sull'eccezione.

Quando viene generata un'eccezione, il codice che segue l'istruzione non verrà eseguito e PHP tenterà di trovare il primo blocco catch corrispondente. Se non viene rilevata un'eccezione, verrà emesso un errore irreversibile PHP con "Eccezione non rilevata ...

  • Un'eccezione può essere lanciata e catturata ("catturata") all'interno di PHP. Il codice può essere racchiuso in un blocco try.

  • Ogni tentativo deve avere almeno un blocco di cattura corrispondente. È possibile utilizzare più blocchi di cattura per catturare diverse classi di eccezioni.

  • Le eccezioni possono essere lanciate (o rilanciate) all'interno di un blocco catch.

Esempio

Di seguito è riportato il pezzo di codice, copia e incolla questo codice in un file e verifica il risultato.

<?php
   try {
      $error = 'Always throw this error';
      throw new Exception($error);
      
      // Code following an exception is not executed.
      echo 'Never executed';
   }catch (Exception $e) {
      echo 'Caught exception: ',  $e->getMessage(), "\n";
   }
   
   // Continue execution
   echo 'Hello World';
?>

Nell'esempio precedente, la funzione $ e-> getMessage viene utilizzata per ottenere un messaggio di errore. Ci sono le seguenti funzioni che possono essere utilizzate daException classe.

  • getMessage() - messaggio di eccezione

  • getCode() - codice di eccezione

  • getFile() - nome del file sorgente

  • getLine() - linea di origine

  • getTrace() - n array del backtrace ()

  • getTraceAsString() - stringa di traccia formata

Creazione di un gestore di eccezioni personalizzato

È possibile definire il proprio gestore di eccezioni personalizzato. Utilizzare la seguente funzione per impostare una funzione di gestione delle eccezioni definita dall'utente.

string set_exception_handler ( callback $exception_handler )

Qui exception_handlerè il nome della funzione da chiamare quando si verifica un'eccezione non rilevata. Questa funzione deve essere definita prima di chiamare set_exception_handler ().

Esempio

<?php
   function exception_handler($exception) {
      echo "Uncaught exception: " , $exception->getMessage(), "\n";
   }
	
   set_exception_handler('exception_handler');
   throw new Exception('Uncaught Exception');
   
   echo "Not Executed\n";
?>

Controllare il set completo di funzioni di gestione degli errori in PHP Error Handling Functions