错误的PHP文件如何捕获异常?

时间:2017-09-10 17:39:13

标签: php apache

当我在浏览器中访问temp.php时,我不知道index.php中的代码是如何捕获异常的。我无法在新创建的本地站点(apache 2)上复制它,所以它可能是我现有的本地站点或apache设置,或者我可能忽略了一些简单的事情。

temp.php:

<?php

try {
    throw new \Exception('temp exception message');
} catch (Exception $e) {
    die('temp catch die');
    error_log("[".date('Y-m-d H:i:s e')."] ".$e->getMessage(). "\n\n", 3, '/media/gcat/storage/it-all.com/Software/ProjectsSrc/Spaghettify/storage/logs/phpErrors.log');
}
die('temp end die');

的index.php:

<?php
//declare(strict_types=1);
try {
    throw new \Exception('index exception message');
} catch (Exception $e) {
    echo 'catch index';
    error_log("[".date('Y-m-d H:i:s e')."] ".$e->getMessage(). "\n\n", 3, '/media/gcat/storage/it-all.com/Software/ProjectsSrc/Spaghettify/storage/logs/phpErrors.log');
}
die('index end die');

当我在浏览器中转到temp.php时,输出是&#34; temp catch die&#34;但错误日志显示&#34;索引异常消息&#34;。

1 个答案:

答案 0 :(得分:0)

die()exit()相同。两者都停止了脚本执行。

永远不会执行temp.php中对error_log()的调用。您在日志文件中看到的行是通过error_log()index.php的调用生成的(当您在浏览器中加载index.php时)。

如果你没有在浏览器中加载index.php但是错误行仍然出现在日志文件中,那么你可能在.htaccess中有重写规则来路由所有非请求 - index.php的现有路径。 (大多数PHP框架使用此类规则来处理SEO友好的URL)。当您在浏览器中加载temp.php时,浏览器也会请求/favicon.ico; Apache无法找到它,并且由于重写规则,它会加载index.php