it-swarm-eu.dev

PHP 7 - come ottenere informazioni utili da un messaggio di eccezione?

Dopo l'aggiornamento da PHP5 a PHP7 ricevo una pagina di errore che dice:

0 - [] operator not supported for strings

Error message Ho letto che ora PHP7 è più intelligente con l'eccezione. Ma il messaggio che ricevo è totalmente inutile. Non so quale file e linea cercare il problema. PHP è vuoto.

Come posso ottenere qualche utile messaggio di errore? Sarei felice di ricevere qualcosa come il vecchio errore fatale Nice che dice dove ripararlo.

Post scriptum Non l'ho risolto dal punto di vista di PHP, ma abilitare il debug di Joomla nella configurazione globale sembra aggiungere l'output lost PHP all'output. Almeno questo ha aiutato in un altro web- sito in una situazione simile.

4
Gruz

Per Joomla su php7 + gli errori non fatali non contengono più il file e la riga nell'errore. Il trucco è gestire l'output di questi errori nel file error.php del tuo modello. Aggiungi il file se non esiste.

Con un numero di modelli (incluso beez) ti mostreranno lo stacktrace (e quindi anche la posizione della chiamata in cui è stato generato l'errore) se hai il debug, ma puoi personalizzare quando e come lancia i messaggi.

Ad esempio potresti creare un file error.php come:

if ($_SERVER['REMOTE_ADDR'] == $your_ip){
  echo "Error Code: " . $this->error->getCode();
  echo "<br>";
  echo htmlspecialchars($this->error->getMessage(), ENT_QUOTES, 'UTF-8');
  echo "<br><br>";
  echo $this->renderBacktrace();
}
4
jamesgarrett

L'errore che hai dopo il tuo PHP aggiornamento della versione dice forte:

il [] operatore non supportato per le stringhe.

Probabilmente stai provando a inserire un array in un stringa o qualcosa del genere.

Avresti ottenuto un errore conversione da array a stringa se l'errore stringa in questione fosse vuoto (a seconda della tua nuova PHP e anche come definito livello di segnalazione errori).

Il [] L'operatore non supportato per l'errore di stringhe si verifica quando si proclama una stringa come matrice o si tenta di utilizzare una stringa come se erano un array.

Dai un'occhiata all'esempio di seguito (con conseguente errore che hai):

$me   = 'foo'; // $me is a variable holding a string value ('foo')
$me[] = 'bar'; // here, $me is re-declared as an array; an attempt to update $me with $me[]

Come puoi risolverlo?

Devi semplicemente dichiarare nuovamente la tua variabile di stringa come tale (sempre come una variabile di stringa; non come una matrice) per l'uso.

Dai un'occhiata a questo:

$me = 'foo'; // with 'foo' as initial value when first declared
$me = 'bar'; // expected result on print_r($me) (successful, with no error): bar

Sopra, $me è stata riassegnata una nuova stringa ('barra') come valore correttamente e senza errori.

Inoltre, non tentare qualcosa di divertente come provare a spingere ancora (nella tua variabile di stringa, sia ri-dichiarata o no) un array, altrimenti otterrai lo stesso errore.

Invece, puoi convertire stringa in matrice se vuoi manipolare i tuoi valori come tali per lo scopo che cerchi di raggiungere.

1
nyedidikeke