Java自学者论坛

 找回密码
 立即注册

手机号码,快捷登录

恭喜Java自学者论坛(https://www.javazxz.com)已经为数万Java学习者服务超过8年了!积累会员资料超过10000G+
成为本站VIP会员,下载本站10000G+会员资源,会员资料板块,购买链接:点击进入购买VIP会员

JAVA高级面试进阶训练营视频教程

Java架构师系统进阶VIP课程

分布式高可用全栈开发微服务教程Go语言视频零基础入门到精通Java架构师3期(课件+源码)
Java开发全终端实战租房项目视频教程SpringBoot2.X入门到高级使用教程大数据培训第六期全套视频教程深度学习(CNN RNN GAN)算法原理Java亿级流量电商系统视频教程
互联网架构师视频教程年薪50万Spark2.0从入门到精通年薪50万!人工智能学习路线教程年薪50万大数据入门到精通学习路线年薪50万机器学习入门到精通教程
仿小米商城类app和小程序视频教程深度学习数据分析基础到实战最新黑马javaEE2.1就业课程从 0到JVM实战高手教程MySQL入门到精通教程
查看: 728|回复: 0

解决ThinkPHP关闭调试模式时报错的问题汇总

[复制链接]
  • TA的每日心情
    奋斗
    2024-4-6 11:05
  • 签到天数: 748 天

    [LV.9]以坛为家II

    2034

    主题

    2092

    帖子

    70万

    积分

    管理员

    Rank: 9Rank: 9Rank: 9

    积分
    705612
    发表于 2021-5-1 10:35:06 | 显示全部楼层 |阅读模式

    解决ThinkPHP关闭调试模式时报错的问题汇总

    案例一:

    最近用ThinkPHP开发一个项目,本地开发测试完成上传到服务器后,第一次打开正常,再刷新页面时就出现 “页面调试错误,无法找开页面,请重试”的错误.

    明明本地设置define(‘APP_DEBUG’, false) 运行没点问题,怎么放到服务器上就出错了昵?

    baidu,Google还是没有找到解决方案,突然发现项目APP_Name/Runtime/Cache目录和APP_Name/Runtime/Logs目录没有可写权限,果断更改!

    案例二:

    ThinkPHP 将 APP_DEBUG 常量设置为 false 后出现了类似下面的问题:

    复制代码代码如下:
    Parse error: syntax error, unexpected T_STRING in E:\PHPnow\htdocs\ojbak\Runtime\~app.php on line 1

    或者直接报”服务器错误”, 怎么办?
    这个和 PHP 有关系,在 php.ini 里修改配置

    复制代码代码如下:
    short_open_tag = On

    因为 app.class.php 里面的 build 方法:
    当开启了调试模式后,会获取相关文件的内容 然后重新组合成文件 这个时候是会自动加上 的
    也就是你看到的 ~app.php 文件了
    但是当你不开启调试模式后,会每次都会加载相关的文件,这样子,你的错误就暴露出来了。

    案例三:

    在thinkphp中将APP_DEBUG设置为false之后,数据查询(select, find等等)总是显示第一条。。但是把APP_DEBUG设置为true之后,就正常了。。这是为什么?有什么解决方案吗?

    正常来说,APP_DEBUG是调试模式,放到线上环境,尽量要设置为false的。。

    自己找一个select查询,在关闭debug的情况下,用写文件的方式调试下查询后生成的sql。

    以上所述就是本文的全部内容了,希望大家能够喜欢。

    装载地址:http://www.jb51.net/article/64552.htm

    ThinkPHP3.2.2调试模式下正常访问,关闭调试模式,部署时出现删出缓存第一次没错,第二次开始错误。

    我碰到的错误如下:

    ThinkPHP3.2.2 { Fast & Simple OOP PHP Framework } — [ WE CAN DO IT JUST THINK ]

    上图:

    看到网上大多数人都碰到,但没很好解决,确实很头痛,没办法只能去阅读源码。在同事的帮助下,就愉快地去翻源,看框架执行流程:

    1.从入口文件开始:index.php  里面有这句(require ‘./ThinkPHP/ThinkPHP.php’;),跳到ThinkPHP.php;

    2.ThinkPHP.php 里面的96行:Think\Think::start();可以看到,跑这函数里面去了,跳到Think.class.php;

    3.Think.class.php 因为是部署模式,所以执行到里面的42行Storage::load($runtimefile);发现没法跳了。直接去找ThinkPHP/Library/Storage.class.php;

    4.Storage.class.php; 源码:static public function connect($type=’File’,$options=array()) {
    $class  =   ‘Think\\Storage\\Driver\\’.ucwords($type);
    self::$handler = new $class($options);
    }

    我们看到,它去取到了一个叫“Flie”的文件,找了下在找到了它ThinkPHP/Library/Storage/File.class.php,打开看看。

    5.File.class.php 里面果然有第3步的load方法,在代码75行。public function load($_filename,$vars=null){
    if(!is_null($vars))
    extract($vars, EXTR_OVERWRITE);
    include $_filename;
    }

    最后锁定,错误是发生在这句代码。

    6.可以测试下结果:(1).

    public function load($_filename,$vars=null){
    if(!is_null($vars))
    extract($vars, EXTR_OVERWRITE);

    echo $_filename;
    die();
    include $_filename;
    }

    结果如下:

    (2)删掉缓Runtime存再测.

    public function load($_filename,$vars=null){
    if(!is_null($vars))
    extract($vars, EXTR_OVERWRITE);

    include $_filename;

    echo $_filename;
    die();
    }

    结果如下:

    7.第6步结果可以看到,问题就出在include 这个文件./Application/Runtime/common~runtime.php时出错了。为什么呢?

    文件如下:

    8.在同事帮助下,终于知道原因,如图:是因为我Common/Common文件夹下的function.php引入了一个user.function.php路径有问题。

    如果直接用require_once ‘user.function.php’;这样在部署情况下common~runtime.php就没办法正确解析,之前调试模式是没问题的。

    最后我们在导入文件的时候加上正确路径就可以了:如图改成require_once APP_PATH.’Common/Common/’user.function.php’;,问题到这里就解决了。

    最后再说明一点:记得关闭调试模式,要把Runtime文件夹删除,到时测试成功通过。

    转载地址:http://blog.csdn.net/u012728971/article/details/47152745

    哎...今天够累的,签到来了1...
    回复

    使用道具 举报

    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    QQ|手机版|小黑屋|Java自学者论坛 ( 声明:本站文章及资料整理自互联网,用于Java自学者交流学习使用,对资料版权不负任何法律责任,若有侵权请及时联系客服屏蔽删除 )

    GMT+8, 2024-5-15 18:31 , Processed in 0.068837 second(s), 29 queries .

    Powered by Discuz! X3.4

    Copyright © 2001-2021, Tencent Cloud.

    快速回复 返回顶部 返回列表