我有一个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睡眠功能,但没有效果。
有人知道如何解决这个问题吗?
答案 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上消失并被客户拒绝。