Maison > cadre php > PensezPHP > le corps du texte

Gestion de thinkphp6 désactivant le mode de débogage (APP_DEBUG=false) problème de rapport d'erreurs

藏色散人
Libérer: 2021-01-05 09:07:51
avant
5015 Les gens l'ont consulté

Ce qui suit est une introduction à thinkphp6 tirée de la colonne du didacticiel du framework thinkphp. Désactivez la gestion des erreurs en mode débogage ( APP_DEBUG=false), j'espère que cela sera utile aux amis dans le besoin !

Introduction


Bonjour à tous, en tant que pseudo-phper entré en contact avec PHP en 2009, a commencé à utiliser le framework TP en 12 ans, et a pas écrit de code complet après 16 ans d'ingénieur, quand j'ai écrit ce LOG, j'ai ressenti des émotions vraiment mitigées et j'ai soupiré, j'ai perdu beaucoup de temps et je n'ai apporté aucune contribution au progrès de PHP ou TP
Le noyau ; Le but de cet article n'est pas le problème lui-même (parce que ce problème n'est pas difficile à résoudre). J'aimerais partager mes réflexions personnelles sur la résolution de problèmes similaires. J'espère que cela pourra apporter un peu d'aide à ceux qui en ont besoin. Les corrections sont les bienvenues. si mes capacités sont limitées.

Description du problème


Fermer le problème de débogage :

  • tp6 ajoute le mode de configuration .env et des problèmes avec l'environnement officiel apparaissent ;
  • Environnement de développement et de test APP_DEBUG = TRUE tout est normal ;
  • Définissez APP_DEBUG = FALSE après la sortie officielle pour signaler une erreur 500

Avantages du mode débogage ; :

  • L'avantage du mode débogage est le suivant : lorsque la journalisation est activée, toutes les informations d'erreur et les informations de débogage
  • seront enregistrées en détail pour faciliter le débogage
  •  ;
  • enregistrera l'ensemble du processus d'exécution en détail ;
  • Les modifications du modèle peuvent prendre effet immédiatement ;
  • Un meilleur débogage et une meilleure recherche des erreurs grâce à la fonction Trace ;
  • Informations détaillées sur les exceptions ; sera affiché lorsqu'une exception se produit ;

Activer et fermer la méthode

Modifier le fichier .ENV

// Définir sur activer le mode débogage
APP_DEBUG = FASLE
// Autres paramètres de variables d'environnement
// …

Idées de solutions


  • étape 1 Reproduire le problème, la réponse la plus simple Méthode, désactiver le mode de débogage dans l'environnement de test
APP_DEBUG = falseENV = testing.....
Copier après la connexion
  • étape 2 Activer le journal, désactiver l'erreur de débogage ; ne sera pas imprimé, vous devez donc activer l'enregistrement des erreurs du fichier php
#编辑php.ini文件,开启log_errors = On
error_log = /data/logs/php7/php_error.log
Copier après la connexion
  • étape 3 Vérifiez le problème, vérifiez php_error.log et voyez quelle est la description spécifique du problème
#php error log 错误如下,路径需要换成您自己的,非必要信息略...PHP Fatal error:  Uncaught $YOUR_REAL_PATH\think\exception\ErrorException: Invalid argument supplied for foreach() in vendor/topthink/think-annotation/src/CachedReader.php:99
Stack trace:#0 /$YOUR_REAL_PATH/vendor/topthink/think-annotation/src/CachedReader.php(99): think\initializer\Error->appError(2, 'Invalid argumen...', '...', 99, Array)
Copier après la connexion
  • étape 4 Résolvez le problème et constatez que le problème est en fait à moitié résolu ;
既然已经找到错误信息了,那么问题就比较好处理了:

option1 如果着急上线,可以先开启调试模式
option2 如果项目没用用注解可以关掉;
option3 如果1和2都不行,那么久仔细研究下CachedReader.php,看看bug出在哪
Copier après la connexion

Solution

Option 1 Solution d'urgence, activer le mode débogage dans l'environnement en ligne

APP_DEBUG = trueENV = live
Copier après la connexion

Option 2 Solution à court terme, dans config/annotation.php Désactiver la fonction d'annotation

<?phpreturn [
    &#39;inject&#39; => [
        &#39;enable&#39;     => false,
        &#39;namespaces&#39; => [],
    ],
    &#39;route&#39;  => [
        &#39;enable&#39;      => false,
        &#39;controllers&#39; => [],
    ],
    &#39;ignore&#39; => [],];
Copier après la connexion

Solution 3 Solution à long terme, vérifiez le code CachedReader.php pourquoi l'erreur est signalée ?

# 第8行引入错误
 use think\Cache;
 更改为========================>
 use think\cache\Driver;
 # 第143行 fetchFromCache 方法错误
  private function fetchFromCache($cacheKey, ReflectionClass $class)
   {
       if (($data = $this->cache->get($cacheKey)) !== false) {
           if (!$this->debug || $this->isCacheFresh($cacheKey, $class)) {
               return $data;
           }
       }
       return false;
   }更改为========================>
   private function fetchFromCache($cacheKey, ReflectionClass $class)
   {
       if ((!$this->debug || $this->isCacheFresh($cacheKey, $class)) && $this->cache->has($cacheKey)) {
           return $this->cache->get($cacheKey, false);
       }
       return false;
   }
Copier après la connexion

Solution 4 Une belle solution, j'espère que tout le monde pourra faire attention aux mises à jour des plug-ins et aux bugs comme habitude

#解决当前问题的方式命令行更新如下,也可以用IDE更新哦$composer update topthink/think-annotation
Copier après la connexion

Résumé du problème

1. Aucune autorisation de connexion au serveur ?
Au niveau du code, directement ini_set("display_errors",1)
2. Que dois-je faire s'il y a plusieurs machines d'équilibrage de charge ?
Vous pouvez lier des hôtes pour localiser l'erreur sur une machine

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Étiquettes associées:
source:csdn.net
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal