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


Notice: Undefined offset: 2 - form registration

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

<?php
$ipaddress=$_SERVER['REMOTE_ADDR'];
$macaddr=false;
#run the external command, break output into lines
$arp=`arp $ipaddress`;
$lines = explode(" ", $arp);
$macaddr = $lines[3];

?>

因此,让我们来了解一下这段代码到底在做什么。

首先,我们获取当前正在查看页面的用户的IP地址。$_SERVER是一个预定义变量,可用于运行php的所有*框。文档显示如下:

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

然后将变量$macaddr设置为false。你将用数据填充它,但它在未来可能仍然是false,所以你应该在尝试访问它之前进行一些检查。稍后会有更多信息。。。

PHP有一个执行运算符。这涉及到将代码封装在backticks中以在服务器上执行代码,这与shell_exec()几乎相同,只是在使用它时没有函数调用的开销。

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

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

首先,您应该检查数组的第三个元素是否存在。如果没有,则arp命令出错,没有返回您所期望的内容,您应该抛出有用的Exception来向代码的未来用户解释出错的原因。

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

最后,为什么不从将arp发送到命令行中得到您想要的东西?首先,尝试在命令行中运行arp yourIpAddressHere,并确保它返回一些数据。当我这样做的时候,我会得到"无条目",所以在让PHP执行之前,请先在命令行中整理您的命令,这样您就可以在代码中使用它。

*除非你一直在做你不该做的事情


为什么我认为它不起作用

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

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

我得到了"禁止进入"的回复。因为在我的本地主机上,地址都是主机名,而不是ip地址,而我的地址不在列表中。

  • 正在远程服务器上尝试arp

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

总之,你试图做一些黑客行为——出于邪恶目的访问用户的mac地址。我不会再帮你回答这个问题了。

您需要$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];

?>