thinkphp6 がデバッグ モードをオフにする (APP_DEBUG=false) エラー報告の問題の処理

藏色散人
リリース: 2021-01-05 09:07:51
転載
5017 人が閲覧しました

以下は、thinkphp フレームワーク チュートリアルのコラムで、その方法を紹介します。 thinkphp6 のデバッグ モード (APP_DEBUG=false) エラー処理をオフにします。困っている友人の役に立てば幸いです。

はじめに


皆さん、こんにちは。2009 年に PHP に出会い、12 年間で TP フレームワークを使い始めた疑似 PHP です。 16 年ぶりに完全なコードを書いたことはありません。エンジニア、このログを書いたとき、本当に複雑な感情とため息が出ました。多くの時間を無駄にし、PHP や TP の進歩に何の貢献もできませんでした。
コアこの記事の目的は問題そのものではありません (この問題は解決が難しいものではないので) 同様の問題に対処する際の個人的な考えを共有したいと思います。必要な方に少しでも役立つことを願っています。修正は歓迎です。私の能力に限界があるなら。

問題の説明


デバッグ問題を閉じる:

  • tp6 で .env 構成モードが追加され、公式環境で問題が発生する;
  • 開発およびテスト環境 APP_DEBUG = TRUE、すべてが正常です;
  • 正式リリース後、500 エラーを報告するには APP_DEBUG = FALSE を設定します;

利点デバッグ モードの利点:

  • デバッグ モードの利点は、ログをオンにすると、デバッグを容易にするために、エラー情報とデバッグ
  • 情報が詳細に記録されることです。
  • 実行プロセス全体を詳細に記録します;
  • テンプレートの変更はすぐに有効になります;
  • トレース機能を使用して、デバッグとエラーの検出を改善します;
  • 例外が発生すると、詳細な例外情報が表示されます;

メソッドを開くおよび閉じる

.ENV ファイルを編集する

//デバッグモードを有効にするように設定します
APP_DEBUG = FASLE
//その他の環境変数設定
// …

解決策のアイデア


  • step1 問題を再現する、最短の答え方法、テスト環境でデバッグ モードをオフにする;
APP_DEBUG = falseENV = testing.....
ログイン後にコピー
  • step2 ログをオンにする、オフにするデバッグ エラーは出力されないため、php ファイルのエラー記録をオンにする必要があります。
  • #
    #编辑php.ini文件,开启log_errors = On
    error_log = /data/logs/php7/php_error.log
    ログイン後にコピー
    step3 問題を確認し、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)
    ログイン後にコピー
    step4 問題を解決すると、実際には問題が半分解決されたことがわかります。
  • 既然已经找到错误信息了,那么问题就比较好处理了:
    
    option1 如果着急上线,可以先开启调试模式
    option2 如果项目没用用注解可以关掉;
    option3 如果1和2都不行,那么久仔细研究下CachedReader.php,看看bug出在哪
    ログイン後にコピー

解決策

オプション 1 緊急ソリューション、オンライン環境でデバッグ モードを有効にする

APP_DEBUG = trueENV = live
ログイン後にコピー

オプション 2 短期的なソリューション、config/annotation.php アノテーション機能をオフにする

<?phpreturn [
    &#39;inject&#39; => [
        &#39;enable&#39;     => false,
        &#39;namespaces&#39; => [],
    ],
    &#39;route&#39;  => [
        &#39;enable&#39;      => false,
        &#39;controllers&#39; => [],
    ],
    &#39;ignore&#39; => [],];
ログイン後にコピー

オプション 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 Wanmei ソリューション、誰もがプラグインの更新とバグに習慣的に注意を払うことができることを願っています

#解决当前问题的方式命令行更新如下,也可以用IDE更新哦$composer update topthink/think-annotation
ログイン後にコピー

問題概要

1. サーバーへのログイン権限がありませんか?

コード レベルで直接 ini_set("display_errors",1)
2. 複数の負荷分散マシンがある場合はどうすればよいですか?
ホストをバインドしてマシンのエラーを特定できます

以上がthinkphp6 がデバッグ モードをオフにする (APP_DEBUG=false) エラー報告の問題の処理の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

関連ラベル:
ソース:csdn.net
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート