未定义的索引:在wordpress中HTTP_HOST


Undefined index: HTTP_HOST in wordpress

我在日志中收到来自wordpress的以下错误:"未定义的索引:HTTP_HOST"。当然,该文件请求 $_SERVER['HTTP_HOST'],但是当网站通过 Apache 访问时,如何看待这一点?我已经通过var_dump验证了这个变量是否存在并已设置。

我想为我的日志清除此错误,并找出这如何实现。我没有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
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;
}
?>

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