2013-11-14 38 views
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 undefined索引错误

我不是一个PHP忍者,但我明白这个错误足以看到它表明一些联想索引标签可能没有被定义。

任何简单的操作都可以让我在沙盒Apache构建中重现错误,这对我很有帮助。

+0

我觉得如果你只是做'$ VAR =阵列(); echo $ var ['imnotdefined'];'它会做你在问什么。 – TecBrat

+1

$ random_array = array('any_thing'=>'but_population'); echo $ random_array ['population']; –

+2

在第11行中,代码正在访问数组中的一个键'population',但该数组没有该键。没有实际的代码,它会在干草堆中寻找针,因为阵列没有这个键可能有多种原因。 –

回答

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

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

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

使用isset($somearray['population'])array_key_exists('population', $somearray)避免出现“未定义索引”错误通常是个好主意,但是如果该键不存在于数组中,则必须决定脚本应该执行的操作。

0

尝试grep -ing查看日志文件中的时间戳和ip,这应该缩小到足够的范围,以便您可以尝试所有这些查看错误表面(希望这是一个GET请求)。一个300M +文件不应该成为一个问题。在为通常的Apache日志格式,这将是这个样子:

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

(在X-ES,其中IP地址进入)。你应该看到像这样在线路末端:

.... 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