1

这类似于function_exists 返回 false 但声明会引发错误,但我认为这不是命名空间的问题,因为它是内部函数,而不是用户函数,这给了我问题。

我在我的 php 应用程序中使用 dompdf,他们的 dompdf 类中的以下函数给我带来了问题....

if ( !function_exists('sys_get_temp_dir')) {
    /**
     * Find the current system temporary directory
     *
     * @link http://us.php.net/manual/en/function.sys-get-temp-dir.php#85261
     */
    function sys_get_temp_dir() {
        if (!empty($_ENV['TMP'])) { return realpath($_ENV['TMP']); }
        if (!empty($_ENV['TMPDIR'])) { return realpath( $_ENV['TMPDIR']); }
        if (!empty($_ENV['TEMP'])) { return realpath( $_ENV['TEMP']); }
        $tempfile=tempnam(uniqid(rand(),TRUE),'');
        if (file_exists($tempfile)) {
        unlink($tempfile);
        return realpath(dirname($tempfile));
        }
    }
}

我得到的是

Fatal error: Cannot redeclare sys_get_temp_dir() on line 873

当我使用 get_defined_functions() 方法回显时,它会在列表末尾显示函数 sys_get_temp_dir 所以它甚至不应该进入我没想到的 if 语句?

4

1 回答 1

1

对于不想深入评论的人:

如果通过 php.ini 文件禁用某个函数,即在disable_functions指令中命名,该function_exists函数将返回false,但仍不允许重新声明该函数。只需从列表中删除该函数,disable_functions代码就会按预期工作。

您可以通过phpinfo()在测试页面上运行或通过在测试页面上运行该函数并查看错误日志来检查这是否是您的问题。实际运行该功能将在错误日志中显示该功能已出于安全原因禁用的消息。

于 2018-05-28T15:59:23.130 回答