解决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

解决ThinkPHP关闭调试模式时报错的问题汇总的更多相关文章

  1. thinkphp关闭调试模式(APP_DEBUG => false),导致程序出错

    thinkphp关闭调试模式(APP_DEBUG => false),导致程序出错,开启调试模式,不报错,怎么解决? 查看Logs日志记录: [ --29T09::+: ] 113.108.11 ...

  2. 解决ThinkPHP开启APP_DEBUG=>false时报错的问题

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

  3. linux下thinkphp取消调试模式后找不到网页解决方案

    1.最大嫌疑是Runtime目录权限不足,导致common~runtime.php文件无法生成, 解决:1.整个Runtime目录删除,让系统重新生成; 2.给Runtime及以下的所有文件足够权限0 ...

  4. Thinkphp开启调试模式

    3.0版本的调试模式开启,必须在项目入口文件中添加常量APP_DEBUG定义,如下: define('APP_DEBUG',True); // 开启调试模式 开启调试模式后,你可能感觉不到什么变化,不 ...

  5. 修改 docker image 安装目录 (解决加载大image时报错:"no space left on device")

    修改 docker image 安装目录 (解决加载大image时报错:"no space left on device" ) 基于Ubuntu16.04 docker版本: 17 ...

  6. // 关闭调试模式  define('APP_DEBUG', false);

    调试模式的优势在于: 开启日志记录,任何错误信息和调试信息都会详细记录,便于调试: 关闭模板缓存,模板修改可以即时生效: 记录SQL日志,方便分析SQL: 关闭字段缓存,数据表字段修改不受缓存影响: ...

  7. 解决使用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 ...

  8. thinkphp 3.2 去除调试模式后报错,怎么解决

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

  9. 如何解决git创建密匙时报错Too many arguments

    如题:git创建密匙时报错Too many arguments. 前几天我遇见了一个问题,git需要重新创建密匙,运行命令ssh-keygen -t rsa -b 4096 -C " you ...

随机推荐

  1. ios基础操作

    ////  main.m  //文件名//  Day2-上课//工程名////  Created by 张开 on 16/1/5.//创建日期及创建人 ////单行注释:可以注释一段代码,起到了解释说 ...

  2. ListView 的使用

    一.ListView:不同视图中一种显示想的集合,显示表格样式的数据信息1.视图:            在其右上方小箭头点击将视图改为Details:或者右键属性在外观View将其改为Details ...

  3. JavaScript中面向对象的的深拷贝和浅拷贝

    理解深拷贝和浅拷贝之前需要弄懂一些基础概念,内存中存储的变量类型分为值类型和引用类型. 1.值类型赋值的存储特点, 将变量内的数据全部拷贝一份, 存储给新的变量. 例如:var num = 123 : ...

  4. express

    1.基于node.js的web开发框架. 2.express目录结构: node_modules public routes views app.js:项目主文件 package.json 3.获取程 ...

  5. bzoj2006: [NOI2010]超级钢琴

    题意:给一个序列(n<=500000),要求选定k个不同区间,使得区间长度在L,R之间,并使得k个区间和之和最大,输出这个最大值. 刚拿到题的时候想的是,对于每个点,如果以它开头,那么之后的L- ...

  6. 如何应用.NET中的消息队列服务

    建立一个队列是应用MSMQ的第一步.您可以通过Windows计算机管理控制台中的消息队列选项完成这一操作,或者自己编程建立一个队列.列表A中的C#代码建立了一个新的私有MSMQ消息队列(如果不存在队列 ...

  7. git branch(git 的branch 使用方法)

    查看分支:         $ git branch    该命令会类出当先项目中的所有分支信息,其中以*开头的表示当前所在的分支.参数-r列出远程仓库中的分支,而-a则远程与本地仓库的全部分支. 创 ...

  8. HDFS读写数据块--${dfs.data.dir}选择策略

    最近工作需要,看了HDFS读写数据块这部分.不过可能跟网上大部分帖子不一样,本文主要写了${dfs.data.dir}的选择策略,也就是block在DataNode上的放置策略.我主要是从我们工作需要 ...

  9. 新手mysql 基础语法

    SELECT * from new; SELECT stuname FROM new; //查询某一列 SELECT DISTINCT stuname FROM new; //查询同一列中不同的值 S ...

  10. http post和put区别

    POST是用来提交数据的.提交的数据放在HTTP请求的正文里,目的在于提交数据并用于服务器端的存储,而不允许用户过多的更改相应数据(主要是相对于在url 修改要麻烦很多).PUT操作是幂等的.所谓幂等 ...