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

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

藏色散人
藏色散人avant
2020-12-25 16:09:525052parcourir

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.....
  • é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
  • é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)
  • é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出在哪

Solution

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

APP_DEBUG = trueENV = live

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

e3fa5384b17edd13525c70273ec9212e [
        'enable'     => false,
        'namespaces' => [],
    ],
    'route'  => [
        'enable'      => false,
        'controllers' => [],
    ],
    'ignore' => [],];

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;
   }

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

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!

Déclaration:
Cet article est reproduit dans:. en cas de violation, veuillez contacter admin@php.cn Supprimer