解决ThinkPHP关闭调试模式时报错的问题汇总
解决ThinkPHP关闭调试模式时报错的问题汇总
案例一:
最近用ThinkPHP开发一个项目,本地开发测试完成上传到服务器后,第一次打开正常,再刷新页面时就出现 “页面调试错误,无法找开页面,请重试”的错误.
明明本地设置define(‘APP_DEBUG’, false) 运行没点问题,怎么放到服务器上就出错了昵?
baidu,Google还是没有找到解决方案,突然发现项目APP_Name/Runtime/Cache目录和APP_Name/Runtime/Logs目录没有可写权限,果断更改!
案例二:
ThinkPHP 将 APP_DEBUG 常量设置为 false 后出现了类似下面的问题:
或者直接报”服务器错误”, 怎么办?
这个和 PHP 有关系,在 php.ini 里修改配置
因为 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
解决ThinkPHP关闭调试模式时报错的问题汇总的更多相关文章
- thinkphp关闭调试模式(APP_DEBUG => false),导致程序出错
thinkphp关闭调试模式(APP_DEBUG => false),导致程序出错,开启调试模式,不报错,怎么解决? 查看Logs日志记录: [ --29T09::+: ] 113.108.11 ...
- 解决ThinkPHP开启APP_DEBUG=>false时报错的问题
最近用ThinkPHP开发一个项目,本地开发测试完成上传到服务器后,第一次打开正常,再刷新页面时就出现 “页面调试错误,无法找开页面,请重试”的错误,我就郁闷啦,明明本地设置define('APP_D ...
- linux下thinkphp取消调试模式后找不到网页解决方案
1.最大嫌疑是Runtime目录权限不足,导致common~runtime.php文件无法生成, 解决:1.整个Runtime目录删除,让系统重新生成; 2.给Runtime及以下的所有文件足够权限0 ...
- Thinkphp开启调试模式
3.0版本的调试模式开启,必须在项目入口文件中添加常量APP_DEBUG定义,如下: define('APP_DEBUG',True); // 开启调试模式 开启调试模式后,你可能感觉不到什么变化,不 ...
- 修改 docker image 安装目录 (解决加载大image时报错:"no space left on device")
修改 docker image 安装目录 (解决加载大image时报错:"no space left on device" ) 基于Ubuntu16.04 docker版本: 17 ...
- // 关闭调试模式 define('APP_DEBUG', false);
调试模式的优势在于: 开启日志记录,任何错误信息和调试信息都会详细记录,便于调试: 关闭模板缓存,模板修改可以即时生效: 记录SQL日志,方便分析SQL: 关闭字段缓存,数据表字段修改不受缓存影响: ...
- 解决使用DBeaver连接MySQL时报错-The server time zone value '�й���ʱ��' is unrecognized or represents more than one time zone.
解决使用DBeaver连接MySQL时报错,其实提示很明显. The server time zone value '�й���ʱ��' is unrecognized or represents ...
- thinkphp 3.2 去除调试模式后报错,怎么解决
1.案例一: 最近用ThinkPHP开发一个项目,本地开发测试完成上传到服务器后,第一次打开正常,再刷新页面时就出现 “页面调试错误,无法找开页面,请重试”的错误. 我就郁闷啦,明明本地设置defin ...
- 如何解决git创建密匙时报错Too many arguments
如题:git创建密匙时报错Too many arguments. 前几天我遇见了一个问题,git需要重新创建密匙,运行命令ssh-keygen -t rsa -b 4096 -C " you ...
随机推荐
- 重温Javascript第一章
一.script标签 script标签有6个属性,其中一个废弃,五个可选. 按照传统的写法,<script>的标签都是放在<head>元素中,但是在<head>中包 ...
- [转]IE8兼容Jquery.validate.js兼容问题
只需在jquery.validate.js 文件中在446行附近找到return $([]).add(this.currentForm.elements).filter(":input&qu ...
- Takeown--夺取文件or文件夹所有权
强制将当前目录下的所有文件及文件夹.子文件夹下的所有者更改为管理员组(administrators)命令:takeown /f * /a /r /d y 将所有d:\documents目录下的文件.子 ...
- @Transactional 事务管理
全面分析 Spring 的编程式事务管理及声明式事务管理 事务传播行为 所谓事务的传播行为是指,如果在开始当前事务之前,一个事务上下文已经存在,此时有若干选项可以指定一个事务性方法的执行行为.在Tra ...
- 一些css知识
两个"::"和一个":"在css3中主要用来区分伪类和伪元素. 1.设置 placeholder属性: // firefox input::-moz-place ...
- 前端面试题之Html和CSS
又到了毕业季,很多小伙伴们都到了找工作的时候了,好多小伙伴问我有前端的面试题么?答:没有. 呃呃… … 小伙伴本宝宝真的没有骗你们,我从毕业到现在一直在一家公司没有换过,所以手里压根没有面试题.我们公 ...
- Jquery弹窗效果
1.主页面 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w ...
- 多个radiobutton选定一个
asp.net中怎么判断其中一个radiobutton被选中后登录的是一个窗体,另一个被选中后登录的是另一个窗体. 页面设置两按钮的GroupName为同一组值: <asp:RadioButto ...
- The trip(Uva 11100)
题目大意: 给出n个数,要求将其分成最少的递增序列,保证序列最少的同时要使得序列长度的最大值最小. n<=10000 题解: 1.我是直接看着<训练指南>里的中文题面的,lrj似乎 ...
- Fragment的startActivityForResult和Activity的startActivityForResult的区别
2016-08-30 18:22:33 前提:我们的APP要兼容Api level 11以前的,所以必须用FragmentActivity 1.对于Fragment的,我们很多时候都会在Activit ...