auto_prepend_file与"要求"?相同吗? (使用register_shutdown_function失败)

时间:2015-02-16 21:16:01

标签: php .htaccess error-handling require

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

1 个答案:

答案 0 :(得分:1)

PHP必须在运行文件之前对其进行解析。

由于echo '是一个解析错误,因此根本不会运行您的文件,这意味着不会发生请求。

如果您的错误是echo 1/0;(不是解析错误),那么您的文件将按预期工作。

编辑:在PHP读取具有解析错误的文件之前,您需要调用register_shutdown_function。在你的第一个和第三个例子中,你正在这样做。