重现PHP未定义的索引错误

时间:2013-11-14 20:16:55

标签: php runtime-error

[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-ninja,但我理解错误足以看到它表明可能没有定义某些关联索引标签。

任何简单的东西都可以让我在沙箱中重现错误我会有所帮助。

3 个答案:

答案 0 :(得分:1)

<?php
echo $_REQUEST["population"]; //Undefined index: population 

//Solution  

$population = isset( $_REQUEST["population"] ) ? $_REQUEST["population"] : null; //if not set then set it to null
?>

答案 1 :(得分:1)

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

您需要查看header.php以了解它是如何填充$somearray的,以及为什么它可能不会为'人口'提供值。

使用isset($somearray['population'])array_key_exists('population', $somearray)来避免“未定义的索引”错误通常是一个好主意,但是如果密钥不存在,则必须确定脚本应该执行的操作。阵列。

答案 2 :(得分:0)

尝试使用grep -ing作为时间戳和日志文件中的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