[Risolto]dopo un E_NOTICE interrompe l'esecuzione dello s...

Linguaggi di programmazione: php, perl, python, C, bash e tutti gli altri.
TommyB1992
Scoppiettante Seguace
Scoppiettante Seguace
Messaggi: 852
Iscrizione: domenica 7 luglio 2013, 15:55
Desktop: GNU/Linux
Distribuzione: Ubuntu 22.04.2 LTS
Sesso: Maschile

[Risolto]dopo un E_NOTICE interrompe l'esecuzione dello s...

Messaggio da TommyB1992 »

L'errore viene generato da una variabile non definita inserita appositamente, non viene stampato "eddai stampati",

Codice: Seleziona tutto

  protected function __blindInitSession() {
    //parent::$sessObj = new adminSession;
    echo $a;
    die('eddai stampati');
  }
L'error handler e l'exception handler sono settati così:

Codice: Seleziona tutto

    final static public function exceptionHandler(\Exception $e) {
        try {
            if ($e instanceof IException) {
              $e->show();
            }
        }
        catch (\Exception $exception) {
            die(
        "<pre>BlindCore::exceptionHandler() Unhandled exception: ".
          BaseErrorHandler::hideCriticalInfo(Security::htmlspecialchars($exception->getMessage()))."\n\n".
          BaseErrorHandler::hideCriticalInfo(Security::htmlspecialchars($exception->getTraceAsString()))
      );
        }
    }
 
  final static public function errorHandler($errorNo, $message, $filename, $lineNo) {
        if (error_reporting() != 0) {
          throw new BlindException('PHP error in file '.$filename.' ('.$lineNo.'): '.$message, $errorNo);
        }
  }
E questo è il metodo con il quale stampo l'errore, nonostante non ci sia nesun exit e die, perchè l'error code è di tipo E_NOTICE, perciò dovrebbe proseguire tranquillamente l'esecuzione dello script.

Codice: Seleziona tutto

  public function show() {
    if (!in_array($this->_code, array(E_NOTICE, E_DEPRECATED))) {
      header('Expires: Mon, 21 Jul 1992 05:00:00 GMT');
      header('Last-Modified: '.gmdate('D, d M Y H:i:s').' GMT');
      header('Cache-Control: no-cache');
      header('Pragma: no-cache');
      header('HTTP/1.1 503 Service Temporarily Unavailable');
      header('Status: 503 Service Temporarily Unavailable');
      header('Retry-After: 3600');
      header('Content-Type: text/html; charset=utf-8');

      if (DEVELOPMENT || $this->_type == 'custom') $errorMsg = $this->_message;
      else {
        $errorMsg = 'Do not worry. Retry again';
      }
 
      die(
        '<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">'."\n".
        '<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en" dir="ltr">'."\n".
        '<head>'."\n".
        '<title>Error</title>'."\n".
        '</head>'."\n".
        '<body style="margin: 40px; font: 85%/130% verdana, arial, sans-serif; color: #333;">'."\n".
        '<h1>An error was encountered</h1>'."\n".
        '<hr />'."\n".
        '<p>'.$errorMsg.'</p>'."\n".
        '</body>'."\n".
        '</html>'."\n"
      );
    }
  }
Come mai?
Ultima modifica di TommyB1992 il domenica 22 maggio 2016, 3:20, modificato 1 volta in totale.
Avatar utente
Zoff
Moderatore Globale
Moderatore Globale
Messaggi: 33338
Iscrizione: mercoledì 10 ottobre 2007, 22:36

Re: PHP - Dopo un E_NOTICE interrompe l'esecuzione dello scr

Messaggio da Zoff »

Il tuo errorHandler trasforma TUTTI gli eventi in eccezioni (usi throw). Le eccezioni sono bloccanti.

Se sostituisci:

Codice: Seleziona tutto

throw new \Exception('PHP error in file '.$filename.' ('.$lineNo.'): '.$message, $errorNo);
con:

Codice: Seleziona tutto

exceptionHandler(new \Exception('PHP error in file '.$filename.' ('.$lineNo.'): '.$message, $errorNo));
Vedrai che l'esecuzione procede.
Prima di aprire una discussione leggi le Guide, poi vedi se c'è un HowTo nel Wiki e fai una ricerca nel Forum!
Applica semplicemente il [Risolto]! Prova: http://forum.ubuntu-it.org/viewtopic.php?f=70&t=548821
Vuoi qualcosa di piu' dal forum? Prova i miei script: http://forum.ubuntu-it.org/viewtopic.php?f=70&t=597066
TommyB1992
Scoppiettante Seguace
Scoppiettante Seguace
Messaggi: 852
Iscrizione: domenica 7 luglio 2013, 15:55
Desktop: GNU/Linux
Distribuzione: Ubuntu 22.04.2 LTS
Sesso: Maschile

Re: PHP - Dopo un E_NOTICE interrompe l'esecuzione dello scr

Messaggio da TommyB1992 »

grazie, sei veramente preparato.
Scrivi risposta

Ritorna a “Programmazione”

Chi c’è in linea

Visualizzano questa sezione: 0 utenti iscritti e 9 ospiti