每当我点击按钮或超链接时,我都需要在命令提示符下运行.bat
文件。我写的代码是:
<?php
if(isset($_POST['submit']))
{
$param_val = 1;
$test='main.bat $par';
// exec('c:\WINDOWS\system32\cmd.exe /c START C:/wamp/www/demo/m.bat');
// exec('cmd /c C:/wamp/www/demo/m.bat');
// exec('C:/WINDOWS/system32/cmd.exe');
// exec('cmd.exe /c C:/wamp/www/demo/main.bat');
exec('$test');
}
else
{
?>
<form action="" method="post">
<input type="submit" name="submit" value="Run">
</form>
<?php
}
?>
我的main.bat
是:
@echo off
cls
:start
echo.
echo 1.append date and time into log file
echo 2.just ping google.com
set/p choice="select your option?"
if '%choice%'=='1' goto :choice1
if '%choice%'=='2' goto :choice2
echo "%choice%" is not a valid option. Please try again.
echo.
goto start
:choice1
call append.bat
goto end
:choice2
call try.bat
goto end
:end
pause
当我点击运行按钮时,它必须打开命令提示符并运行main.bat
文件,但每当我点击运行时它什么也没说。
答案 0 :(得分:2)
$test='main.bat $par';
exec('$test');
... 不会工作。
PHP只在双引号中使用$变量。
这也是不良做法:$test = "main.bat $par";
。
Windows也需要反斜杠而不是需要转义的斜杠,而是用双引号中的另一个反斜杠。
使用以下其中一项:
$test = 'cmd /c C:\wamp\www\demo\main.bat ' . $par;
或
$test = "cmd /c C:\\wamp\\www\\demo\\main.bat {$par}";
运行:
echo shell_exec($test);
更失败:
从脚本末尾删除pause
。 PHP不会自动获得它。
仔细查看批处理文件,我打赌你甚至不需要它。批处理文件中的所有内容都可以放入PHP文件中。
正如 Elias Van Ootegem 已经提到的那样,你需要在STDIN中输入你的选项(1,2)到批处理文件中。
答案 1 :(得分:1)
由于您通过浏览器运行PHP脚本,因此在Web服务器上,.bat文件将在Web服务器而非客户端上执行。
无论您是在同一台计算机上运行服务器,您的蝙蝠都可能被执行但您无法与之交互。
解决方案可能是制作一个接受参数而不是交互的bat,并将交互带回PHP脚本前面,以便用正确的args调用bat执行。
答案 2 :(得分:0)
我在我的电脑上试过这个exec。 你的蝙蝠会被执行,但你看不到黑色界面。你可以像 @echo一样试试蝙蝠 回声tmptile&gt;像这样的tmp.txt ,它可以创建一个名为tmp.txt的文件来告诉你。蝙蝠被执行了。
答案 3 :(得分:0)
假设您只想模拟交互式会话,您只需使用proc_open()及相关功能:
<?php
$command = escapeshellcmd('main.bat');
$input = '1';
$descriptors = array(
0 => array("pipe", "r"), // stdin
1 => array("pipe", "w"), // stdout
);
$ps = proc_open($command, $descriptors, $pipes);
if(is_resource($ps)){
fwrite($pipes[0], $input);
fclose($pipes[0]);
while(!feof($pipes[1])){
echo fread($pipes[1], 4096);
}
fclose($pipes[1]);
$output = proc_close($ps);
if($output!=0){
trigger_error("Command returned $output", E_USER_ERROR);
}
}else{
trigger_error('Could not execute command', E_USER_ERROR);
}