Php 如何使用参数为IP的网络外壳更改IP地址

Php 如何使用参数为IP的网络外壳更改IP地址,php,batch-file,networking,cmd,netsh,Php,Batch File,Networking,Cmd,Netsh,我正在尝试使用PHP运行下面的批处理脚本(它在命令提示符下运行良好),以使用传递的参数更改IP @echo off setlocal enabledelayedexpansion netsh int ip set address "EDU_LAN_Connection" static 172.31.%1.110 255.255.255.0 172.31.%1.1 1 在PHP中: system("cmd /c C:\EDU_Project\change_ip.bat 6"); 运行PHP脚

我正在尝试使用PHP运行下面的批处理脚本(它在命令提示符下运行良好),以使用传递的参数更改IP

@echo off
setlocal enabledelayedexpansion
netsh int ip set address "EDU_LAN_Connection" static 172.31.%1.110 255.255.255.0 172.31.%1.1 1
在PHP中:

 system("cmd /c C:\EDU_Project\change_ip.bat 6");
运行PHP脚本时出现以下错误:

Invalid address parameter (172.31.61.1 1). It should be a valid IPv4 address. 

我不知道如何在参数中使用delayedexpansion。请帮忙

批次参数仅用
%1
处理。不是
%1%

相应地更改批处理文件:

 netsh int ip set address "EDU_LAN_Connection" static 172.31.%1.110 255.255.255.0 172.31.%1.1 1

而不是使用系统函数并将参数传递给批处理文件。我使用shell_exec直接从PHP运行netsh命令:

$var= 18;
shell_exec('netsh int ip set address name=\"EDU_LAN_Connection\" static 172.31.'.$var.'.110 255.255.255.0 172.31.'.$var.'.1 1');

我认为您应该研究IPV4地址的格式。您正在尝试分配一个B类地址,这很好。一个标准的B类地址应该是(172.x.y.z),你现在正在做172.x.y.z A,其中A是。对于IP构造无效,因此我的原始注释此错误与此问题中讨论的相同:但我不确定如何将参数与DelayedExpansion一起使用感谢我所做的更改,脚本在命令提示符下运行良好,但从PHP运行时仍会出现此错误:无效地址参数(172.31.6.110 255.255.255.0 172.31.6.1)。它应该是有效的IPv4地址。Ping请求找不到主机172.31.6.1-n2。请检查姓名,然后再试一次。我在回答中编辑了一个拼写错误。请再试一次。谢谢你的帮助Stephan,是的,我已经看到打字错误了,它仍然不起作用。但在命令提示下工作正常。但错误已更改为:无效的地址参数(172.31.6.110 255.255.255.0 172.31.6.1)。它应该是一个有效的IPv4地址,我看不出有什么原因。但我注意到,最后一个“1”(表示“metric”)丢失了。