我已经尝试了一切我能想到的,以阻止在CakePHP中显示错误。我检查了CakePHP指令手册并搜索了互联网和stackoverflow,搜索“关闭CakePHP中的错误报告”和“关闭CakePHP中的调试模式”等短语。以下是对仍在显示的错误的描述以及我试图在CakePHP中隐藏这些错误的内容:
我仍在犯错误
错误一:我故意在其中一个中错误地声明了一个变量 我的Controller类来测试错误是否正在显示和接收 “解析错误:语法错误,意外T_VARIABLE,期待T_FUNCTION (文件路径和行号)“
错误二:我尝试在URL中输入一堆乱码 测试它是否会显示错误。我得到了一个“失踪 控制器“来自Cake的错误。
我试图阻止显示错误
Configure :: write('debug',0); (编辑为零)在\ app \ Core.php
的error_reporting(0); (添加了该行)在\ app \ Config \ bootstrap.php
Configure :: write在\ app \ Core.php中的数组中有一个'level'键,所以我将它从“E_ALL& E_DEPRECATED”更改为0.然后我尝试将其删除。
在public_html中添加了一个php.ini文件,其中包含一大堆关闭错误的命令。我还删除了这个文件,以确保它一直没有干扰。
在\ lib \ Cake \ Utility \ Debugger.php中删除了___ construct()的部分(这从页面的标题标签中删除了错误消息,当出现乱码而不是丢失控制器错误)。顺便说一下,错误消息被放入HTML标题中。这很奇怪。
注释掉echo $ self-> outputError($ data);在\ lib \ Cake \ Utility \ Debugger.php
仔细检查了手册的“部署”页面,该页面引用了“调试”页面。该页面讨论了设置“Configure :: debug”,其编写方式与“Configure :: write('debug',0)略有不同;”所以我尝试了变化。
我搜索了包含php的所有目录,其中包含短语“error_reporting(”和“ini_set(”以确保我没有在那里的某处启用错误而忘记了。
如果有人知道为什么这些仍在显示尽管我已经尝试过或者可以做些什么来关闭它们,我会非常感激。
感谢。
答案 0 :(得分:2)
我尝试了马克的建议,这有效。当我在整个Cake安装中搜索“Configure :: write('debug'”时,我发现了大量的行来打开调试 - 尽管大多数这些行都存在于从官方CakePHP站点下载的原始文件中。作为实验,我制作了我的Cake安装的副本,更改了所有将调试设置为高于0的实例,并且工作正常。然后,假设其中一些应该在那里,并且不确定哪个应该是在那里,我决定完全删除CakePHP,下载一个新的副本,并替换它。
配置新的core.php后,缺少的控制器错误被替换为未找到的错误,我故意为测试目的引起的解析错误被内部服务器错误替换。我不确定显示内部服务器错误是它应该做的...但是在编辑调试设置后行为确实发生了变化,并且它不再显示文件路径。所以,我猜它的表现方式应该如此。
我想让Mark有助于我解决这个问题,但他只发表评论。
答案 1 :(得分:1)
我认为你有一些选择:
配置错误
这里你去app / Config / core.php
Configure::write('Error', array(
'handler' => 'ErrorHandler::handleError',
'level' => E_ALL & ~E_DEPRECATED,
'trace' => true
));
配置错误处理程序时,您有5个内置选项:
handler - callback - 处理错误的回调。您可以将其设置为任何可调用类型,包括匿名函数。
级别 - int - 您有兴趣捕获的错误级别。使用内置的php错误常量和位掩码来选择您感兴趣的错误级别。
trace - boolean - 在日志文件中包含错误的堆栈跟踪。每次出错后,堆栈跟踪都将包含在日志中。这有助于找到错误发生的位置/时间。
consoleHandler - 回调 - 用于在控制台中运行时处理错误的回调。如果未定义,将使用CakePHP的默认处理程序。
创建错误处理程序作为您自己的
//在app / Config / core.php
中 Configure::write('Error.handler', 'AppError::handleError');
//在app / Config / bootstrap.php
中`App::uses('AppError', 'Lib');`
//在app / Lib / AppError.php中
class AppError {
public static function handleError($code, $description, $file = null, $line = null, $context = null) {
echo 'There has been an error!';
}
}
每次发生错误时,此类/方法都会打印出“出现错误!”。由于您可以将错误处理程序定义为任何回调类型,因此如果您使用的是PHP5.3或更高版本,则可以使用匿名函数。:
Configure::write('Error.handler', function($code, $description, $file = null, $line = null, $context = null) {
echo 'Oh no something bad happened';
});
您也可以查看here获取更多帮助