如何启用 PHP apache_request_headers() 或将 PHP 更改为 apache 模块

如何启用 PHP apache_request_headers() 或将 PHP 更改为 apache 模块

我正尝试将数据迁移到 CentOS x64 服务器上,该服务器上已安装 PHP、WHM 和其他几种服务。我的许多现有 PHP 脚本都依赖于 PHP 的 apache_request_headers() 函数,而当前服务器的 PHP 配置不支持该函数。显然,将 PHP 编译为 Apache 模块是一种解决方案,但还有其他方法可以启用此功能(无需卸载 PHP、重新安装等以及所有依赖服务),也许就像修改 php.ini 一样简单,不知何故?

答案1

Apache 函数仅有的如果运行 httpd SAPI(也称为 mod_php)则可用。

CentOS 的 PHP 软件包中含有 mod_php,因此足以支持它们。如果您需要比现有软件包更新的版本,则需要从某处找到更新的软件包,或者需要使用适当的 SAPI 自行构建 PHP 或 PHP 软件包。

答案2

这是有关设置在 Apache 2 下运行的 PHP 的文档。该网站还包含有关 Apache 1 的信息。 http://www.php.net/manual/en/install.unix.apache2.php

最直接相关的项目是 6、7 和 8
6. 设置您的 php.ini
7. 编辑您的 httpd.conf 以加载 PHP 模块。
8. 告诉 Apache 将某些扩展解析为 PHP。

答案3

如果您以 CGI/FastCGI 的形式运行 PHP,那么您就无法获得apache_request_headers()(也称为getallheaders())函数。

然而...

从 5.4.0 开始,PHP 包含该函数的一个版本,可在 FastCGI 中运行。

对于 PHP 的早期版本,您可以自行开发。虽然这种方法会失去标头的大小写敏感性名称(CGI/FastCGI 将所有标题名称大写)它通常足以满足 99.9% 的可能用途。

这是我的代码为此,很久以前就已写好并根据 LGPLv3 发布:

if (!is_callable('getallheaders')) {
    # Convert a string to mixed-case on word boundaries.
    function uc_all($string) {
        $temp = preg_split('/(\W)/', str_replace("_", "-", $string), -1, PREG_SPLIT_DELIM_CAPTURE);
        foreach ($temp as $key=>$word) {
            $temp[$key] = ucfirst(strtolower($word));
        }
        return join ('', $temp);
    }

    function getallheaders() {
        $headers = array();
        foreach ($_SERVER as $h => $v)
            if (preg_match('/HTTP_(.+)/', $h, $hp))
                $headers[str_replace("_", "-", uc_all($hp[1]))] = $v;
        return $headers;
    }

    function apache_request_headers() { return getallheaders(); }
}

相关内容