Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/234.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/google-sheets/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PHP致命错误:未捕获异常';例外情况';_Php_Exception_Throw - Fatal编程技术网

PHP致命错误:未捕获异常';例外情况';

PHP致命错误:未捕获异常';例外情况';,php,exception,throw,Php,Exception,Throw,我在PHP中处理异常。例如,我有一个脚本,它读取$\u GET请求并加载一个文件;如果文件不存在,则应引发新异常: if ( file_exists( $_SERVER['DOCUMENT_ROOT'] .'/'.$_GET['image'] ) ) { // Something real amazing happens here. } else { throw new Exception("The requested file does not exists."); } 问题

我在PHP中处理异常。例如,我有一个脚本,它读取$\u 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
我想知道我是否错过了一些真正明显的东西

我已经检查了这个问题,但它与我的问题不太相似,没有简明的答案

请帮忙

*编辑*

这似乎与
throw
关键字有关。例如,如果我使用
echo
,我会在屏幕上打印消息,如下所示:

异常“exception”,消息为“文件不存在”。在C:\sites\wonderfulproject\script.php:183堆栈跟踪:#0{main}

为什么呢

**编辑2**


多亏了@Orangepill,我对如何处理异常有了更好的理解。我还从奈图斯那里找到了一个很棒的图坦卡门,帮了我很大的忙。链接:

这是显示错误关闭时未捕获异常的预期行为

这里的选项是通过php或ini文件打开显示错误,或捕获并输出异常

 ini_set("display_errors", 1);

如果您抛出异常,其目的是在更远处的某个地方有人会捕获并处理它。如果不是,则是服务器错误(500)

另一个选项是为脚本设置默认错误处理程序

 function default_exception_handler(Exception $e){
          // show something to the user letting them know we fell down
          echo "<h2>Something Bad Happened</h2>";
          echo "<p>We fill find the person responsible and have them shot</p>";
          // do some logging for the exception and call the kill_programmer function.
 }
 set_exception_handler("default_exception_handler");
函数默认\u异常\u处理程序(异常$e){
//向用户展示一些东西,让他们知道我们摔倒了
呼应“发生了不好的事情”;
echo“我们找到负责人并将他们枪毙”

; //对异常进行一些日志记录并调用kill_程序员函数。 } 设置异常处理程序(“默认异常处理程序”);
只要在这里添加一些额外的信息,以防有人和我有同样的问题

我在代码中使用名称空间,并且我有一个类,该类具有引发异常的函数

但是,我在另一个类文件中的try/catch代码被完全忽略,并引发了未修补异常的正常PHP错误

结果我忘了在顶部添加“use\Exception;”,添加该选项解决了错误。

throw new Exception('test exception');
我得到了500(但在浏览器中没有看到任何东西),直到我把

php_flag display_errors on
在my.htaccess中(仅用于子文件夹)。 还有更详细的设置,
请参阅

您的日志确切地告诉您您希望它告诉您什么,问题是什么?
文件存在
显然返回了
错误
,可能是因为该文件实际上不存在。@DanyCaissy问题是我收到一个500-内部服务器错误,不要在屏幕上出现我的消息和堆栈跟踪异常。请注意路径遍历攻击!美好的但我想我可以在try-catch块外抛出异常,如果我错了,请纠正我。我已经更新了我的问题,对我尝试过的内容进行了新的描述。你可以。。。但您将收到一条500服务器消息:)。。。。抛出异常没有任何意义,除非给自己机会捕获和处理异常,或者如果异常不可恢复,至少为最终用户格式化一个信息丰富的“oops”页面。try/catch不必位于引发异常的函数中,也可以位于执行堆栈的更底层。。。类似于该函数的调用者,或该函数的调用者。@darksoulsong更新了答案,以显示使用set_exception_处理程序创建Pokemon异常处理程序(必须捕获所有异常)来处理潜入try/catch块之外的异常。或者,您可以在类调用中定义路径:throw new\exception(…);注意前面的“\”定义了根目录下类的路径。感谢@xorinzor解决了我的问题!我快要发疯了…
php_flag display_errors on