a:服务器
b:用户浏览器
b输入字符串(例如baidu.com)
b点击确定按钮
a创建cmd,编辑(例如创建baidu.com.cmd,文件内容为ping baidu.com -t)
a运行cmd,n分钟后关闭(例如运行baidu.com.cmd,5分钟后关闭该cmd)
下面代码能执行cmd,但是会一直等待cmd的执行直到php脚本超时。。要停止cmd执行视乎无效
<meta charset="utf-8"/>
<?php
set_time_limit(300);//设置超时时间5分钟
$exe_command = 'C:\\Windows\\System32\\cmd.exe F:\\phpStudy\\root\\WWW\\script.cmd';
$descriptorspec = array(
0 => array("pipe", "r"), // stdin
1 => array("pipe", "w"), // stdout -> we use this
2 => array("pipe", "w") // stderr
);
$process = proc_open($exe_command, $descriptorspec, $pipes);
if (is_resource($process))
{
$count=0;
$killed=false;
while(!feof($pipes[1]))
{
sleep(1);
$count++;
if($count>=5){//原本想这样测试大于5s,用taskkill命令杀死批处理中执行的具体程序,视乎无效,会运行到脚本超时后自动关闭cmd。。
exec("taskkill /f /im cmd.exe");
exec("taskkill /f /im ping.exe");
proc_close($process);
$killed=true;//标记为
break;
}
//下面为信息输出,不需要可以注释下面的3句
$return_message = fgets($pipes[1], 1024);
if (strlen($return_message) == 0) break;
echo iconv('GBK','UTF-8',$return_message).'<br />';
}
if($killed==false)proc_close($process);
}
?>