Php 未定义索引:wordpress中的HTTP_主机
我在日志中收到wordpress的以下错误:“未定义索引:HTTP\U主机”。当然,该文件正在请求$_SERVER['HTTP_HOST'],但当网站通过Apache访问时,这怎么可能被视为?我已经通过var_dump验证了这个var的存在和设置 我想为我的日志清除此错误,并找出这是如何可能的。我没有wordpress CLI cron,那么这会是什么呢?我要指出的是,这是一个随机请求,产生了这个错误。我浏览博客时不会发生这种情况 这是调用堆栈(…=/): 调用堆栈:Php 未定义索引:wordpress中的HTTP_主机,php,wordpress,Php,Wordpress,我在日志中收到wordpress的以下错误:“未定义索引:HTTP\U主机”。当然,该文件正在请求$_SERVER['HTTP_HOST'],但当网站通过Apache访问时,这怎么可能被视为?我已经通过var_dump验证了这个var的存在和设置 我想为我的日志清除此错误,并找出这是如何可能的。我没有wordpress CLI cron,那么这会是什么呢?我要指出的是,这是一个随机请求,产生了这个错误。我浏览博客时不会发生这种情况 这是调用堆栈(…=/): 调用堆栈: 0) 17, 1) ...
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
看起来这可能是因为一个错误的请求。如果客户机不发送此头,则服务器上也不存在此头,即使它是apache。必须来自脚本机器人。非法请求可能不包括它,因此总是可能的 最好的预防方法是在使用前检查它是否存在,就像使用每个变量一样
<?php
if (array_key_exists('HTTP_HOST', $_SERVER) {
//use $_SERVER['HTTP_HOST']
}
?>
从技术上讲,只有在HTTP 1.1中状态代码应为400的情况下才是非法的,如所述:“RFC所有基于Internet的HTTP/1.1服务器必须使用400(错误请求)状态代码响应任何缺少主机头字段的HTTP/1.1请求消息。”
<?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;
}
?>