php手册说: http://php.net/manual/en/ini.core.php#ini.auto-prepend-file
指定在之前自动解析的文件的名称 主文件。包含该文件就像使用require调用它一样 函数,所以使用了include_path。
让我们做一个测试
register_shutdown_function.php
<?php
error_reporting(-1);
ini_set('display_errors', 1);
register_shutdown_function('foo');
function foo() {
if(!is_null($e = error_get_last())) {
echo 'bar';
}
}
?>
的.htaccess
php_value auto_prepend_file /www/public_html/register_shutdown_function.php
的index.php
<?php
echo '
?>
结果:&#34; bar&#34;被展示。按预期工作。
下一次测试
我们删除 .htaccess 并更改 index.php ,如下所示:
<?php
require('register_shutdown_function.php');
echo '
?>
现在没有调用register_shutdown_function()?!
仅适用于此 index.php :
<?php
require('register_shutdown_function.php');
include('file_with_parse_error.php');
?>
这是一个与PHP 5.4.37(FastCGI)相关的错误吗?我问,因为有时候我需要多次删除和/或覆盖.htaccess文件到&#34;启用&#34;或&#34;禁用&#34; 的auto_prepend_file
答案 0 :(得分:1)
PHP必须在运行文件之前对其进行解析。
由于echo '
是一个解析错误,因此根本不会运行您的文件,这意味着不会发生请求。
如果您的错误是echo 1/0;
(不是解析错误),那么您的文件将按预期工作。
编辑:在PHP读取具有解析错误的文件之前,您需要调用register_shutdown_function
。在你的第一个和第三个例子中,你正在这样做。