所以我试图阻止致命错误阻止我的脚本运行
所以我将错误报告设置为0:
error_reporting(0);
然后我添加了一些垃圾代码..
junk code~~~~trololololololol
但是,PHP最终会返回解析错误:
Parse error: syntax error, unexpected 'require_once' (T_REQUIRE_ONCE) in etc
有没有办法阻止PHP在出现解析错误时停止执行,或者这是一种无望的努力?
答案 0 :(得分:3)
有没有办法阻止PHP在出现解析错误时停止执行,或者这是一种无望的努力?
是的,那是没有希望的。在发现垃圾后,不可能恢复执行,只是没有任何可预测的状态留给编译器遵守。它可能缺少随机函数,变量定义以及什么不是,所以逻辑上可以做的就是停止工作。
你可以抑制错误但不要强迫它在数字等同于暴力心脏病发作后继续工作。
答案 1 :(得分:0)
你做不到。 PHP首先从头到尾读取脚本中的文本(解析它)并将其转换为可以执行的某种形式的低级字节码。如果它无法解析,那么根本就没有可执行代码,它只会失败。
由于运行时错误,您的代码已经在执行,PHP已经知道您是否有办法处理该错误。但是由于解析错误,开始时没有程序。
答案 2 :(得分:0)
是的,您可以处理解析错误。看一下这个例子:
<强>的index.php 强>
<?php
ini_set('display_errors', '0');
register_shutdown_function('err_handler');
$modules = array('module1.php', 'module2.php', 'module3.php');
load_modules($modules);
function load_modules(&$modules) {
foreach ($modules as $key => $module) {
unset($modules[$key]);
include $module;
}
}
function err_handler() {
global $modules;
load_modules($modules);
}
<强> module1.php 强>
<?php junk code~~~~trololololololol;
<强> module2.php 强>
<?php junk code~~~~trololololololol;
<强> module3.php 强>
<?php echo "Surprise!\n";
明智地使用register_shutdown_function(),set_error_handler()和set_exception_handler(),您可以使您的脚本绝对不受所有类型的PHP错误的影响。可以将此代码视为PHP中defensive programming技术的示例。
答案 3 :(得分:0)
如果出现解析错误,则 php 根本无法执行脚本,因此它不会运行 error_reporting(0);
,因此它将回退到 error_reporting
的任何设置和 display_errors
在 php.ini
文件中。因此,您可以通过编辑 php.ini 文件来防止显示解析错误,但这会在全局范围内将其关闭。
如果您希望在默认情况下全局显示错误(不利于生产!),那么您可以使用 .htaccess
设置在本地关闭它们,因为在解析php 脚本。