web-dev-qa-db-fra.com

PHP 7 - Comment obtenir des informations utiles à partir d'un message d'exception?

Après la mise à niveau de PHP5 à PHP7, une page d'erreur s'affiche:

0 - [] operator not supported for strings

Error message J'ai lu que maintenant PHP7 est plus intelligent avec exception. Mais le message que je reçois est totalement inutile. Je ne sais pas quel fichier et quelle ligne rechercher le problème. PHP est également vide.

Comment puis-je obtenir un message d'erreur utile? Je serais heureux d'obtenir quelque chose comme le vieux Nice erreur fatale dire où le résoudre.

P.S. Je ne l'ai pas résolu du point de vue de PHP, mais l'activation du débogage de Joomla dans la configuration globale semble ajouter le message d'erreur perdu PHP à la sortie. Au moins, cela a aidé à un autre site Web. site dans une situation similaire.

4
Gruz

Pour Joomla sur php7 +, les erreurs non fatales ne contiennent plus le fichier et la ligne dans l'erreur. L'astuce consiste à gérer la sortie de ces erreurs dans le fichier error.php de votre modèle. Ajoutez le fichier s'il n'existe pas.

Avec un certain nombre de modèles (y compris beez), ils vous montreront le stacktrace (et donc aussi l'emplacement de l'appel renvoyé l'erreur) si vous avez le débogage en cours, mais vous pouvez personnaliser quand et comment il envoie les messages.

Par exemple, vous pouvez créer un fichier error.php tel que:

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'erreur que vous avez eue après votre PHP mise à jour de version) le dit fort:

l'opérateur [] non pris en charge pour les chaînes.

Vous essayez probablement de pousser un tablea dans un chaîne ou quelque chose de ce genre.

Vous auriez eu une erreur conversion de tableau en chaîne si le chaîne en question était vide (en fonction de votre nouvelle PHP version et ainsi comme défini niveau de signalisation d'erreur).

L'opérateur [] Non pris en charge pour les chaînes est une erreur lorsque vous re-déclarez une chaîne chaîne en tant que tablea ou essayez d'utiliser une chaîne chaîne comme s'il s'agissait d'un tablea.

Jetez un oeil à l'exemple ci-dessous (ce qui entraîne l'erreur que vous avez):

$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[]

Comment pouvez-vous résoudre ce problème?

Vous devez simplement re-déclarer votre variable de chaîne juste comme telle (toujours en tant que variable de chaîne; pas en tant que tableau) à utiliser.

Jetez un coup d'oeil à ceci:

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

Ci-dessus, $me A été affecté à une nouvelle chaîne ('bar') comme valeur avec succès et sans aucune erreur.

De même, n'essayez pas quelque chose de drôle, comme d'essayer d'insérer tout de même (dans votre variable chaîne, qu'elle soit déclarée ou non) un tableau ou vous obtiendrez la même erreur.

Au lieu de cela, vous pouvez convertir votre chaîne en tablea si vous souhaitez manipuler vos valeurs en tant que telles dans le but que vous souhaitez atteindre.

1
nyedidikeke