我正尝试将数据迁移到 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(); }
}