php ip address redirect

时间:2014-06-17 15:49:59

标签: php linux networking redirect

我有一个php脚本,它会更改/ etc / network / interfaces文件中的ip地址。

编辑文件后,我使用exec("sudo ifdown eth0) exec(sudo ifup eth0)刷新配置。 它可以工作,但需要将近40秒。

我想通过使用:

将用户重定向到新的ip地址
header("Location: http://$ip/?page=networkSettings");

如果我注释掉exec调用,重定向本身才有效。 (当然我得到“无法连接错误”)

否则webbrowser会显示: 等待192.168.0.50

我使用了php睡眠功能,但没有效果。

有人知道如何解决这个问题吗?

3 个答案:

答案 0 :(得分:2)

您需要使用其他一些方法来发布重定向。由于服务器的IP地址在脚本运行时发生更改,因此会导致连接中断 - 客户端永远不会收到Location头。

我见过很多嵌入式设备使用的方法是延迟重定向。让您的页面显示一个结果页面,其中meta refresh到新地址,然后更改机器的IP。在刷新时设置超时,以便在超时到期并且客户端重定向到新IP时,计算机应该启动其新IP并正常工作。

答案 1 :(得分:0)

您的exec()来电缺少报价,导致致命错误。

答案 2 :(得分:0)

考虑您正在做的事情:您取下网络接口,使用新IP重新启动它,然后尝试向客户端发送重定向。但到那个时候,你正在使用新的IP,而客户端将拒绝来自新IP的数据包,因为它只期待来自 IP的响应。

你的序列应该更像:

header("Location: $newip");
flush(); // try and send the header BEFORE you take down the network
exec('take down network');
exec('bring up network');

甚至这可能不是完全可靠的,因为PHP只能向Web服务器SUGGEST输出缓冲区应该被刷新。你可能实际上在刷新完成之前进行网络删除,然后你仍然在同一条船上:重定向在新IP上消失并被客户拒绝。