thinkphp 6デバッグモード(APP_DEBUG=false)エラー処理をオフにする

11566 ワード

TP 6デバッグエラー処理の考え方を閉じる
  • 引用
  • 問題説明
  • デバッグの問題を閉じる:
  • デバッグモードのメリット:
  • 開閉方法
  • 解決構想
  • ソリューション
  • 方案1応急解決、オンライン環境オープンデバッグモード
  • 案2短期解決、config/annotation.phpで注釈機能を閉じる
  • 案3長期解決、CachedReaderを参照phpコードはなぜ間違っていますか?
  • 方案4玩美解决,希望大家能习惯性关注卡片的更新和BUG
  • 問題まとめ
  • 引用する
    皆さん、こんにちは、09年にPHPに接触し、12年にTPフレームワークを起用し、16年後にコードを完全に書いたことがない偽エンジニアとして、このLOGを書いたとき、心の中は本当に五味が雑然としていて、ため息をついていて、自分が良い时間を浪費したと同時にPHPやTPの進歩に少しも貢献していませんでした.本文の核心目的は問題そのものではなく(この問題は解決しにくいから)個人が類似の問題を処理する考え方を分かち合い、必要な人に少しの助けを提供することを望んで、能力は限られているので指摘を歓迎します.
    問題の説明
    デバッグの問題を閉じるには、次の手順に従います.
  • tp 6が増加する.Env構成モード、パブリッシュ正式な環境問題が発生しました;
  • 開発及びテスト環境APP_DEBUG=TRUEはすべて正常です;
  • 公式リリース後にAPPを設定_DEBUG=FALSE 500エラー;

  • デバッグモードのメリット:
  • デバッグモードの利点は、ログ記録、エラー情報、デバッグ
  • をオンにすることです.
  • 息はすべて詳しく記録して、デバッグしやすいです;
  • は、実行プロセス全体を詳細に記録する.
  • テンプレートの変更は即時に有効になります.
  • トレース機能によってより良いデバッグとエラーを発見する.
  • 異常が発生した場合、詳細な異常情報が表示されます.

  • オープンクローズ方法
    編集ENVファイル
    //オープンデバッグモードAPPの設定DEBUG=FASLE//その他の環境変数設定//...
    解決策
  • step 1問題を再現し、最も簡単な答えで、テスト環境でデバッグモードをオフにします.
  • APP_DEBUG = false
    ENV = testing
    .....
    
  • step 2オープンログ、クローズデバッグエラーは印刷しないのでphpファイルエラーレコード
  • を開く必要があります.
    #  php.ini  ,  
    log_errors = On
    error_log = /data/logs/php7/php_error.log      
    
  • step 3質問を表示し、php_を表示します.error.log、問題の具体的な説明を見て
  • #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)
    
  • step 4は問題を解決して、問題が実は問題がすでに半分解決したことを発見しました;
  •            ,           :
    
    option1       ,         
    option2              ;
    option3   1 2   ,        CachedReader.php,  bug   
    

    ソリューション
    方案1応急解決、オンライン環境起動調整モード
    APP_DEBUG = true
    ENV = live
    

    方案2短期解決、config/annotation.phpで注記機能を閉じる
    
    return [
        'inject' => [
            'enable'     => false,
            'namespaces' => [],
        ],
        'route'  => [
            'enable'      => false,
            'controllers' => [],
        ],
        'ignore' => [],
    ];   
    

    シナリオ3長期的な解決、CachedReaderを参照phpコードはなぜ間違っていますか?
    #  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;
       }
    

    方案4玩美解决,希望大家能习惯性关注卡片的更新和BUG
    #                ,    IDE   
    $composer update topthink/think-annotation
    

    問題の要約
  • サーバーのログイン権限がありませんか?コードレベル直接ini_set(“display_errors”,1)
  • 負荷均衡複数台はどうすればいいですか?hosts方式をバインドし、エラーを1台のマシン
  • に位置決めすることができる.