有一个解决方案(确实检测解析错误),与您所读的相反:
我在生产服务器上运行一个网站,如果确实存在致命错误,我们不能显示任何错误,也不显示任何白页,这一点至关重要。目前,我们没有测试服务器,因此很难弄清楚。
生产就绪的 PHP 错误处理
我们网站上显示的每个 PHP 文件都包含一个位于 public_html/ 目录上方的文件 base.php,因此我们的想法是在执行其他操作之前在 base.php 的最顶部设置一个错误处理程序:
base.php——将其插入代码顶部:
//DO NOT DISPLAY ERRORS TO USER
ini_set("display_errors", 0);
ini_set("log_errors", 1);
//Define where do you want the log to go, syslog or a file of your liking with
ini_set("error_log", dirname(__FILE__).'/php_errors.log');
register_shutdown_function(function(){
$last_error = error_get_last();
if ( !empty($last_error) &&
$last_error['type'] & (E_ERROR | E_COMPILE_ERROR | E_PARSE | E_CORE_ERROR | E_USER_ERROR)
)
{
require_once(dirname(__FILE__).'/public_html/maintenance.php');
exit(1);
}
});
现在,base.php 的想法是根本不包含太多代码,不包含任何函数,仅包含网站运行所需的其他文件。
在测试我的例子时,我有类似的东西
include_once(dirname(__FILE__).'/public_html/lib/foobar.php');
所以我去了 foobar.php 并犯了一个语法错误,转向function... 进入功能。
通常会显示错误或显示白页,但由于 register_shutdown_function(),现在 public_html/maintenance.php 页面显示一条消息,内容如下:
抱歉,我们目前遇到了技术问题。请在几分钟后刷新此页面,看看我们是否已解决该问题。
当然,用户不知道这是“maintenance.php”
Cheers!