目录
关闭调试问题:
调试模式好处:
开启关闭方法
方案1 应急解决,线上环境开启调试模式
方案2 短期解决,在config/annotation.php中关闭注解功能
方案3 长期解决,查看CachedReader.php代码为什么报错?
方案4 玩美解决,希望大家能够习惯性关注插件的更新和BUG
首页 php框架 ThinkPHP 处理thinkphp6关闭调试模式(APP_DEBUG=false)报错问题

处理thinkphp6关闭调试模式(APP_DEBUG=false)报错问题

Dec 25, 2020 pm 04:09 PM
thinkphp6

下面由thinkphp框架教程栏目给大家介绍thinkphp6 关闭调试模式(APP_DEBUG=false)报错处理,希望对需要的朋友有所帮助!

引言


 phper们大家好,作为一个09年接触PHP、12年起用TP框架、16年后没有完整写过代码的伪工程师,写这个LOG的时候心里真的是五味杂陈、唏嘘不已,自己浪费了大好时光的同时并没有为PHP或TP的进步作出一丁点的贡献;
 本文的核心目的不是问题本身(因为这个问题不难解决)而是分享一下个人处理类似问题的思路,希望能给需要的人提供一丁点的帮助,能力有限欢迎指正。

问题描述


关闭调试问题:

  • tp6增加.env配置模式,发布正式环境问题出现;
  • 开发及测试环境APP_DEBUG = TRUE 一切正常;
  • 发布正式后设置APP_DEBUG = FALSE 报500错误;

调试模式好处:

  • 调试模式的优势在于:开启日志记录,任何错误信息和调试
  • 息都会详细记录,便于调试;
  • 会详细记录整个执行过程;
  • 模板修改可以即时生效;
  • 通过Trace功能更好的调试和发现错误;
  • 发生异常的时候会显示详细的异常信息;

开启关闭方法

编辑.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 玩美解决,希望大家能够习惯性关注插件的更新和BUG

#解决当前问题的方式命令行更新如下,也可以用IDE更新哦$composer update topthink/think-annotation
登录后复制

问题汇总

1.没有服务器登录权限?
代码层面直接ini_set(“display_errors”,1)
2.负载均衡多台怎么办?
可以绑定hosts方式,将错误定位到一台机器

以上是处理thinkphp6关闭调试模式(APP_DEBUG=false)报错问题的详细内容。更多信息请关注PHP中文网其他相关文章!

本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

热AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover

AI Clothes Remover

用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool

Undress AI Tool

免费脱衣服图片

Clothoff.io

Clothoff.io

AI脱衣机

Video Face Swap

Video Face Swap

使用我们完全免费的人工智能换脸工具轻松在任何视频中换脸!

热工具

记事本++7.3.1

记事本++7.3.1

好用且免费的代码编辑器

SublimeText3汉化版

SublimeText3汉化版

中文版,非常好用

禅工作室 13.0.1

禅工作室 13.0.1

功能强大的PHP集成开发环境

Dreamweaver CS6

Dreamweaver CS6

视觉化网页开发工具

SublimeText3 Mac版

SublimeText3 Mac版

神级代码编辑软件(SublimeText3)

热门话题

Java教程
1662
14
CakePHP 教程
1419
52
Laravel 教程
1313
25
PHP教程
1262
29
C# 教程
1235
24