【发布时间】:2013-07-07 12:20:00
【问题描述】:
我正在玩 PHP 中的异常。例如,我有一个读取 $_GET 请求并加载文件的脚本;如果文件不存在,应该抛出一个新的异常:
if ( file_exists( $_SERVER['DOCUMENT_ROOT'] .'/'.$_GET['image'] ) ) {
// Something real amazing happens here.
}
else {
throw new Exception("The requested file does not exists.");
}
问题是,当我尝试为测试提供一个不存在的文件时,我得到了 500 错误而不是异常消息。服务器日志如下:
[09-Jul-2013 18:26:16 UTC] PHP Fatal error: Uncaught exception 'Exception' with message 'The requested file does not exists.' in C:\sites\wonderfulproject\script.php:40
Stack trace:
#0 {main}
thrown in C:\sites\wonderfulproject\script.php on line 40
我想知道我是否在这里遗漏了一些非常明显的东西。
我已经检查了这个问题PHP fatal error: Uncaught exception 'Exception' with message,但这与我的问题不太一样,并且没有简明的答案。
请帮忙?
* 编辑 *
这似乎与throw 关键字有关。例如,如果我使用echo,我会在屏幕上打印出消息,如下所示:
异常“异常”,带有消息“文件不存在”。在 C:\sites\wonderfulproject\script.php:183 堆栈跟踪:#0 {main}
这是为什么呢?
** 编辑 2 **
感谢@Orangepill,我对如何处理异常有了更好的了解。我从 nettuts 中找到了一个非常棒的 tut,它很有帮助。链接:http://net.tutsplus.com/tutorials/php/the-ins-and-outs-of-php-exceptions/
【问题讨论】:
-
您的日志准确地告诉您您希望它告诉您的内容,问题是什么?
-
file_exists显然返回了false,可能是因为该文件实际上不存在。 -
@DanyCaissy 问题是我收到 500 - 内部服务器错误,而不是我的消息和屏幕中的堆栈跟踪出现异常。
-
请注意路径遍历攻击!