PHP无法使用系统命令的解决方法

发布于 2023-01-18  401 次阅读


  • php的权限比较低,无法实现一些在c语言和python中容易实现的操作,但是用php做后端又十分的方便,那就写好程序,让php来调用就行了呗

系统自带命令调用问题

  • 然后果然程序调用就出问题了,比如写一个start.bat,里面写上上篇文章中提到的netsh interface ip set dns "WLAN" dhcp,在php里面写一个调用:
<?php
exec("start.bat",$output,$status);
?>
  • 访问php,发现dns并没有被设置为dhcp,难道命令出问题了?把回显和返回码打印一下
<?php
exec("start.bat",$output,$status);
echo $output."<br>";
echo $status;
?>
  • 果然,,,,,没发现任何问题,回显了正常语句,返回码也是1,但是就是没有运行
  • 最后问了k哥,一句话给我干懵了,你试了system吗?
<?php
system("start.bat",$output);
?>
  • 成功运行!不一定system函数就一定可以,但是多换几个函数试试总能成功

非系统自带命令调用问题

  • 上面的案例调用start.bat中的命令是windows系统自带的命令,很多时候我们要使用一些非windows系统自带的命令,比如pip install,java -version这类命令
  • 在上面的例子中更换system函数就可以解决了,但是在这种情况下并不能直接解决
  • 你想说把命令写入环境变量就可以了,但是把java写入环境变量后,不管是将java -version写入start.bat,以system调用,还是直接system函数直接执行命令都无法成功输出java版本(只是例子,实际上输出来也看不到)
  • 我查了很多网站,但是都没有得到满意的答案,还是求助k,他告诉我这是因为php无法获取环境变量,如果需要用到需要使用函数来临时定义环境变量,怎么临时添加网上也说法不一,我是这样做的
先临时定义环境变量:
putenv('Path=C:\miaomiao\wangwang');
putenv('guagua=C:\miaomiao\wangwang\miemie');
再调用
exec("java -version",$output,$status);
  • 成功!
届ける言葉を今は育ててる
最后更新于 2024-02-07