未定义的索引:HTTP_HOST 在 wordpress 中

Undefined index: HTTP_HOST in wordpress

我在日志中收到来自 wordpress 的以下错误:"Undefined index: 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

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

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

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

<?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;
}
?>