注意:未定义的偏移量:2 - 表单注册

时间:2014-04-11 07:59:29

标签: php

这是整个代码。问题出在最后一行。我没有写它,我已经从我的无线热点应用程序论坛复制了它,我有这个错误。有人能给我一个如何解决它的提示吗?感谢

<?php
$ipaddress=$_SERVER['REMOTE_ADDR'];
$macaddr=false;

#run the external command, break output into lines

$arp=`arp $ipaddress`;

$lines = explode(" ", $arp);

$macaddr = $lines[3];


?>

2 个答案:

答案 0 :(得分:0)

您需要$macaddr包含哪些内容?

<?php
//RETURNS AN IP ADRES 127.0.0.1
$ipaddress=$_SERVER['REMOTE_ADDR'];

$macaddr = false;

#run the external command, break output into lines

$arp='arp ' . $ipaddress;

//You're trying to explode `arp 127.0.0.1` with a space
$lines = explode(" ", $arp);

//$lines contains array(0 => 'arp', 1 => '127.0.0.1') 

//$lines[3] does not exist that's where the undefined offset is coming from.
$macaddr = $lines[3];


?>

答案 1 :(得分:0)

让我们详细了解这段代码的用途。

首先,我们获取当前正在查看该页面的用户的IP地址。 $_SERVER是运行php的所有*框上都可用的预定义变量documentation在此处显示:

  

用户正在查看当前页面的IP地址。

然后您将变量$macaddr设置为false。您将使用数据填充此数据,但将来可能仍然是错误的,因此您应该在尝试访问它之前执行一些检查。更多关于此...

PHP有一个execution operator。这涉及将代码包装在反引号中以在服务器上执行代码,并且与shell_exec()几乎相同 - 除非在使用它时您没有函数调用的开销。

您正在执行arp 127.0.0.1,就像在命令行中一样,并将结果作为数组返回,然后将其放入$arp变量。

然后你在任何空格上用explode()分割字符串,最后尝试读取数组的第三个元素。

首先,您应该检查数组的第三个元素是否存在。如果没有,arp命令出错并且没有返回您的预期,您应该抛出有用的Exception来解释代码的未来用户出了什么问题。

其次,您应该在结尾检查$macaddr是否包含您想要的信息,可能是通过正则表达式或类似的验证功能。

最后,为什么不通过将arp发送到命令行来获得您想要的内容?好吧,首先,尝试在命令行中运行arp yourIpAddressHere并确保它返回一些数据。当我这样做时,我得到“没有条目”,所以在使用PHP之前,在命令行中排除命令 first ,以便在代码中使用它。

* 除非你一直在搞乱你不应该做的事情。


为什么我认为它不起作用

我正在尝试你的arp命令。以下是我的结果:

  • 使用我的IP地址(内部和外部)
  • 在localhost上尝试arp

我得到“没有进入”。因为在我的本地主机上,地址都是主机名,而不是IP地址,我的不在列表中。

  • 在远程服务器上试用arp

我只从arp命令获取服务器的ip地址。因此,尝试访问访问用户的mac地址是行不通的,因为执行是在服务器上进行的。不在用户的计算机上。

总之,你正在尝试做一些hacky - 访问用户的mac地址以达到恶意目的。我不打算再回答这个问题。