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

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

时间: 2024-08-06 15:41:33

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

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

最近用ThinkPHP开发一个项目,本地开发测试完成上传到服务器后,第一次打开正常,再刷新页面时就出现 “页面调试错误,无法找开页面,请重试”的错误,我就郁闷啦,明明本地设置define('APP_DEBUG', false) 运行没点问题,怎么放到服务器上就出错了昵?baidu,Google还是没有找到解决方案,突然发现项目APP_Name/Runtime/Cache目录和APP_Name/Runtime/Logs目录没有可写权限,果断更改,F5,唉好啦,妈妈再也不用担心出现错误信息啦!

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

1.最大嫌疑是Runtime目录权限不足,导致common~runtime.php文件无法生成, 解决:1.整个Runtime目录删除,让系统重新生成; 2.给Runtime及以下的所有文件足够权限0755. 2.网上搜索如下: 解决ThinkPHP关闭调试模式时报错的问题汇总 投稿:hebedich 字体:[增加 减小] 类型:转载 时间:2015-04-22我要评论 本文给大家汇总了一下个人在项目中所遇到的关闭ThinkPHP的调试模式时遇到报错的几种情况以及最终的处理办法,非常的简单实用,

【php】开启与关闭调试与报错信息

开启调试与报错信息有利于编程人员掌握出错的位置,从而更快地解决问题. 关闭调试信息,则在你的网页发布时候,用户看不到你的php出现运行错误,当然也不会看到正确东西,仅仅会是一篇空白. 关键是在php安装之后,忘记开启调试与报错信息,在你编程的时候写错代码,却发现php没有报错,会产生一头雾水,此时你要关注你的php安装目录下的php.ini 如下图,找到display_errors那行,注意把Off,改成On,On的第一个字母注意大写.反之亦然. 同时,重启一下你的 Apache服务器. 此时你

解决git add README.md 时报错 fatal: pathspec 'README.md' did not match any files

解决办法一: 直接在远程仓库创建然后在本地$ git pull origin master 解决办法二: 换成$ touch README.md在本地创建修改后再commit push上去 解决git add README.md 时报错 fatal: pathspec 'README.md' did not match any files 原文地址:https://www.cnblogs.com/coderzjz/p/12660490.html

android NDK开发中,用Cygwin调试本地代码时报错“Another debug session running,Use --force to kill it”原因及解决办法

在使用ndk-gdb调试的时候,执行$NDK/ndk-gdb --verbose报错"Another debug session running,Use --force to kill it". 我查了NDK官方文档,是这样说的: --force: By default, ndk-gdb aborts if it finds that another native debugging session is running on the same device. Using --forc

Extjs Window里包含FormPanel关闭再打开时报错 解决方法

注意一:首先不能用close()方法关闭window,要用hide().但是窗口(window)默认带个个关闭图标'X',这个默认是执行close()方法的,故设置window的closeAction: 'hide'  就可以了,注意的是这里的Action里的A要大写. 注意二:关闭再打开的时候,不用new了,只需要show()出来就可以了.当然要判断,如: if(!win){ win = new NewWindow(); }

解决Eclipse Pydev中import时报错:Unresolved import

在安装 图像处理工具包 mahotas 后,在eclipse中尝试import mahotas时,出现Unresolved import错误,按快捷无法自动生成代码提示 但是,程序运行时可以通过,在命令行中import时,正常 解决方法如下: 在project右击打开菜单 ->选择properties->选择"PyDev-Interpreter/Grammar"->点击链接"Click here to configure an interpreter not

解决iredmail下postfix发送邮件时报错[need fully-qualified hostname]

iredmail配置好后,尝试从一客户端的OE中发送邮件,结果报错,在mail主机中查看tail /var/log/maillog,发现如下错误信息: Oct 24 12:50:49 mail2 postfix/smtpd[9280]: connect from unknown[192.168.5.240] Oct 24 12:50:49 mail2 postfix/smtpd[9280]: NOQUEUE: reject: RCPT from unknown[192.168.5.240]: 5

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

问题原因:出现此问题一般是 docker 根目录空间不足导致 解决方法:重新指定docker image 安装目录,当然确保你新指定的目录有足够的空间. 方法步骤: ##查看 docker 的根目录 [[email protected] k8s]# docker info | grep -i "docker root dir" WARNING: You're not using the default seccomp profile Docker Root Dir: /var/lib/