6

我目前正在为在线 MMO 开发 IGB(游戏内浏览器)中的应用程序。对于第三方开发,浏览器会发送带有游戏信息的 HTTP 标头,例如位置、项目 ID、项目类型 ID 等。

这是我一直用来练习的一个小脚本。该脚本适用于我的本地服务器,并且与在此问题上发布的其他所有人一样,它不适用于我的 Web 服务器。我得出的结论是,这是因为 Apache 没有作为模块安装。我与我的托管服务提供商交谈。他们说除了我需要找到“apache_request_headers”的替代品之外,他们无法告诉我任何事情。我已经查看了此站点上有关此主题的所有先前发布的问题,但我无法看到它们是如何组合在一起的。如何使用此处的示例来完成我的最终结果。像这样[问题]:调用未定义的函数 apache_request_headers()

我的代码:

<?php
$headers = apache_request_headers();

foreach ($headers as $header => $value) {
    echo "$header: $value <br />\n";
}
?>

我的错误:

Fatal error: Call to undefined function apache_request_headers() in /home/ncgotggb/public_html/ezalternatives.com/index.php on line 2

今年我一直在学习,它是自学的,而且速度很快,所以我对很多这些概念还是新手。在这一点上,我别无选择,我非常投入并且需要完成它。显示您的答案时 如果您以完整的形式展示您的解决方案,我们将不胜感激。

4

2 回答 2

9

听起来您的本地服务器正在运行 Apache 而您的远程服务器不是,因为此功能仅适用于 Apache(除非服务器运行 PHP 5.4.0,否则它也适用于 FastCGI。

在此函数的 PHP 手册页面上,其中一位评论者包含了一个替换函数,该替换函数仅在内置函数不存在时才被声明。我没有对此进行测试,但我已经看到其他地方发布了相同的功能。

if( !function_exists('apache_request_headers') ) {
    function apache_request_headers() {
        $arh = array();
        $rx_http = '/\AHTTP_/';

        foreach($_SERVER as $key => $val) {
            if( preg_match($rx_http, $key) ) {
                $arh_key = preg_replace($rx_http, '', $key);
                $rx_matches = array();
           // do some nasty string manipulations to restore the original letter case
           // this should work in most cases
                $rx_matches = explode('_', $arh_key);

                if( count($rx_matches) > 0 and strlen($arh_key) > 2 ) {
                    foreach($rx_matches as $ak_key => $ak_val) {
                        $rx_matches[$ak_key] = ucfirst($ak_val);
                    }

                    $arh_key = implode('-', $rx_matches);
                }

                $arh[$arh_key] = $val;
            }
        }

        return( $arh );
    }
}
于 2013-08-03T06:42:17.907 回答
0

我发现我在 ISP Config 中的站点设置为将 PHP 设置为“Fast-CGI”——将其更改为“MOD-PHP”可以很好地解决问题。

于 2014-03-03T19:49:46.597 回答