【问题标题】:Undefined index: HTTP_HOST in wordpress未定义的索引:wordpress 中的 HTTP_HOST
【发布时间】:2015-03-31 03:29:59
【问题描述】:

我在日志中收到来自 wordpress 的以下错误:“未定义索引:HTTP_HOST”。当然,该文件正在请求 $_SERVER['HTTP_HOST'],但是这怎么能看作是通过 Apache 访问网站呢?我已经通过 var_dump 验证了这个 var 存在并且已设置。

我想为我的日志清除此错误,并找出这如何可能。我没有 wordpress CLI cron,所以这可能是什么?我要指出的是,这是一个随机请求,会产生此错误。浏览博客时不会出现。

这是调用堆栈 (... = /): 调用堆栈:

0) 17,
1) ... var... www2... wordpress... wp-blog-header.php 16, 
2) ... var... www2... wordpress... wp-includes... template-loader.php 74, 
3) ... var... www2... wordpress... wp-content... themes... oneengine... page.php 1, 
4) get_header 45, 
5) locate_template 477, 
6) load_template 501, 
7) ... var... www2... wordpress... wp-content... themes... oneengine... header.php 134, 
8) wp_nav_menu 328, 
9) _wp_menu_item_classes_by_context 549

【问题讨论】:

    标签: php wordpress


    【解决方案1】:

    非法请求可能不包含它,所以它总是可能的。

    最好的预防方法是在使用前检查它是否存在,就像每个变量一样。

    <?php
    if (array_key_exists('HTTP_HOST', $_SERVER) {
      //use $_SERVER['HTTP_HOST']
    }
    ?>
    

    或者,因为这是一个非法请求,你可以阻止它。

    <?php
    if (!array_key_exists('HTTP_HOST', $_SERVER) {
        if (!headers_sent()) {
            $protocol = (isset($_SERVER['SERVER_PROTOCOL']) ? $_SERVER['SERVER_PROTOCOL'] : 'HTTP/1.0');
            header($protocol . ' 404 Not Found');
        }
    
        echo '<h1>Not Found</h1>';
        exit;
    }
    ?>
    

    【讨论】:

    • 从技术上讲,它只在 HTTP 1.1 中是非法的,其中状态码应该是 400,如 rfc2616-sec19.html#sec19.6.1.1 所述:“RFC 所有基于 Internet 的 HTTP/1.1 服务器必须以 400(坏Request) 状态码到任何缺少 Host 头字段的 HTTP/1.1 请求消息。"
    【解决方案2】:

    这似乎是由于错误的请求。如果客户端不发送此标头,那么它也不存在于服务器上,即使它是 apache。必须来自脚本机器人。

    【讨论】:

      猜你喜欢
      • 2018-07-07
      • 1970-01-01
      • 2022-01-25
      • 1970-01-01
      • 2013-07-19
      • 2012-09-03
      • 1970-01-01
      • 2014-04-14
      • 2012-09-30
      相关资源
      最近更新 更多