1
[Mon Nov 11 11:07:18 2013] [error] [client nnn.nnn.nnn.nnn] PHP Notice:  Undefined index: population in /home/client/locale-qa/include/header.php on line 11

我试图从供应商发送的 300+MB Apache 日志文件中重现此日志错误。供应商无法提供在header.php(令人沮丧)中找到的代码,但这个错误,许多人似乎是我们站在我们这边的 HTTP 响应的根源。

我不是 PHP 忍者,但我对错误的理解足以看到它表明可能未定义某些关联索引标签。

任何可以让我在沙盒 Apache 构建中重现错误的简单方法都会有所帮助。

4

3 回答 3

1

header.php 的第 11 行引用$somearray['population'],但该数组中没有“人口”键。

您需要查看 header.php 以了解它是如何填充的$somearray,以及为什么它可能没有为“population”提供值。

isset($somearray['population'])使用或避免“未定义索引”错误通常是一个好主意array_key_exists('population', $somearray),但如果数组中不存在键,您必须决定脚本应该做什么。

于 2013-11-14T20:26:25.830 回答
1
<?php
echo $_REQUEST["population"]; //Undefined index: population 

//Solution  

$population = isset( $_REQUEST["population"] ) ? $_REQUEST["population"] : null; //if not set then set it to null
?>
于 2013-11-14T20:23:02.853 回答
0

尝试grep获取日志文件中的时间戳和 ip,这应该可以缩小范围,以便您可以全部尝试并查看错误是否出现(希望这是一个 GET 请求)。一个 300M+ 的文件应该不是问题。对于通常的 apache 日志格式,这看起来像这样:

grep -iE "x\.x\.x\.x.*\[11/\Nov\/2013:11:07:19" the_log_file.log

(IP地址所在的x-es)。您应该在行尾看到类似这样的内容:

.... GET /some_path/some.php?foo=bar HTTP/1.1" 200 42

从中,您可以获取路径,将其附加到您的服务器域中,然后查看错误是否存在。您可以忽略图像、css 和其他静态资产 GET,但如果您也有一些重写规则或在这些行上执行 PHP 的其他方式,那么也要检查这些。

如果你在一个类似 unix 的系统上,你可能已经有 grep,如果你不是,你可以在这里获取 Windows 的副本:http: //gnuwin32.sourceforge.net/packages/grep.htm

于 2013-11-14T20:27:32.627 回答