Ⅰ 在服务器上用php调用cmd执行某exe文件,求代码!!!!
很多情况下需要php调用其他程序如shell命令、shell脚本、可执行程序等等,此时需要使用到诸如exec/system/popen/proc_open等函数,每种函数有各自适合使用的场景以及需要注意的地方。
前提:PHP没有运行在安全模式
如果PHP运行在安全模式下,那么在执行外部命令、打开文件、连接数据库、基于HTTP的认证这4个方面将会受到制约,可能在调用外部程序时无法获取预期的结果,此时需要设置特定目录,可以在php.ini中编辑safe_mode_exec_dir参数来指定。
1. exec
原型:string exec ( string command [, array &output [, int &return_var]] )
描述:返回值保存最后的输出结果,而所有输出结果将会保存到$output数组,$return_var用来保存命令执行的状态码(用来检测成功或失败)。
例子:$ret = exec("ls -al", $output, $var);
注意:
A. 输出结果会逐行追加到$output中,因此在调用exec之前需要unset($output),特别是循环调用的时候。
B.
如果想通过exec调用外部程序后马上继续执行后续代码,仅仅在命令里加"&"是不够的,此时exec依然会等待命令执行完毕;需要再将标准输出
做重定向才可以,例如:exec("ls -al >/dev/null &", $output, $var);
C.
要学会善用EscapeShellCmd()和EscapeShellArg()。函数EscapeShellCmd把一个字符串
中所有可能瞒过Shell而去执行另外一个命令的字符转义。这些字符在Shell中是有特殊含义的,象分号(|),重定向(>)和从文件读入
(<)等。函数EscapeShellArg是用来处理命令的参数的。它在给定的字符串两边加上单引号,并把字符串中的单引号转义,这样这个字符串
就可以安全地作为命令的参数。
2. system
原型:string system ( string command [, int &return_var] )
描述:执行给定的命令,返回最后的输出结果;第二个参数是可选的,用来得到命令执行后的状态码。
例子:$ret = system("ls -al", $var);
注意:略。
3. passthru
原型:void passthru (string command [, int return_var])
描述:执行给定的命令,但不返回任何输出结果,而是直接输出到显示设备上;第二个参数可选,用来得到命令执行后的状态码。
例子:passthru("ls -al", $var);
注意:略。
4. popen
原型:resource popen ( string command, string mode )
描
述:打开一个指向进程的管道,该进程由派生给定的 command 命令执行而产生。 返回一个和 fopen()
所返回的相同的文件指针,只不过它是单向的(只能用于读或写)并且必须用 pclose() 来关闭。此指针可以用于 fgets(),fgetss()
和 fwrite()。
例子:$fd = popen("command", 'r'); $ret = fgets($fd);
注意:只能打开单向管道,不是'r'就是'w';并且需要使用pclose()来关闭。
5. proc_open
原
型:resource proc_open ( string cmd, array descriptorspec, array
&pipes [, string cwd [, array env [, array other_options]]] )
描述:与popen类似,但是可以提供双向管道。具体的参数读者可以自己翻阅资料,比如该博客:http://hi..com/alex_wang58/blog/item/a28657de16fec55195ee372a.html。
注意:
A. 后面需要使用proc_close()关闭资源,并且如果是pipe类型,需要用pclose()关闭句柄。
B. proc_open打开的程序作为php的子进程,php退出后该子进程也会退出。
C. 笔
者在使用的时候遇到获取外部程序输出阻塞的问题,也就是在例子中的fgets($pipes[1])语句阻塞了,无法继续进行。经过多方查证后发现,问题
一般出在外部程序中,比如外部程序是C程序,使用fprintf(stdin, "****
\n");输出结果,此时需要加上fflush(stdout);才行,否则输出结果可能会暂留缓存中,无法真正输出,而php也就无法获取输出了。
例子:
///< 打开管道
$pwd = "*****";
$pipes = array();
$command = "*****";
$desc = array(array('pipe', 'r'), array('pipe', 'w'), array('pipe', 'w'));
$handle = proc_open($command, $desc, $pipes, $pwd);
if (!is_resource($handle)) {
fprintf(STDERR, "proc_open failed.\n");
exit(1);
}
///< 读写
fwrite($pipes[0], "*****\n");
$ret = rtrim(fgets($pipes[1]), "\n");
///< 关闭管道
fclose($pipes[0]);
fclose($pipes[1]);
fclose($pipes[2]);
proc_close($handle);
Ⅱ cmd命令大全/cmd命令提示符大全
1.开始->运行->CMD
2.进入某个磁盘,直接盘符代号:如D:,不用CD 命令切换
3.进入除根录以下的文件夹 cd 文件夹路径 例如我要进入 E:/Program Files/ PHP 就
输入 E:回车
注: 不 能在一打开CMD的时候运行CD E:/Program Files/PHP,需要先进入磁盘(若一打开CMD的时候运行CD E:/Program Files/PHP,目录不会切换,但在下次输入盘符的时候进入上一次希望进入的目录,如输入E:会直接进入E:/Program Files/PHP)
输入 CD "Program Files"/PHP 回车
注:如果需要在dos下查看带有空格的文件夹(如Documents and settings,Program files等文件夹),可以有下面两种处理方法: 1、给文件夹加引号。 如C:/>cd c:/"documents and settings"这样的好处是多长的文件名都可以全部显示出来。 2、由于一般情况下DOS系统只支持8.3格式的文件名,因此在DOS下遇到长文件名的文件夹时,取前面6位,然后在后面加上一个~号和数字1。 你可以输入C:/>cd c:/docume~1 进入Documents and settings文件夹。当截取前面的6个字母之后出现重复时,可以将1改为2,依此类推。
3.进入上一层目录 CD ../
4.显示目录下的文件及了目录 dir
刚接触电脑的时候是从DOS系统开始,DOS时代根本就没有Windows这样的视窗操作界面,只有一个黑漆漆的窗口,让你输入命令。所以学DOS系统操作,cmd命令提示符是不可或缺的。可以告诉大家,大多数的程序员牛人或计算机专家在DOS系统下的操作是非常了得的,所以菜鸟要想成为计算机高手,DOS命令是非学不可。
直到今天的Windows系统,还是离不开DOS命令的操作。学习DOS系统操作,首先了解命令提示符。先了解每个命令提示符的作用,然后才能够灵活运用。
下面将详细的为大家介绍cmd命令大全的符号和作用说明。
想要更详细的了解cmd命令大全、cmd命令提示符大全,还需要进入CMD命令提示符尝试,运行CMD命令提示符的方式:点击“开始”菜单——>选择“运行”——>输入“CMD”,点击确定或按下回车键即可。
Ⅲ php中怎样执行cmd
exec("命令");//记得把路劲写对
Ⅳ php 命令行程序如何常驻内存
点击电脑开始菜单,打开运行窗口,在窗口编辑框里输入cmd,点击确定按钮,打开cmd命令
窗口,然后进入你的工程目录中的可执行程序文件夹下
输入可执行程序文件名 后面带上你需要的参数 按Enter键 就可以了
cmd命令:如你的可执行程序在D://CP//debug/aa.exe
你需要在命令行窗口输入d:按Enter键进入D盘
cd CP/debug按Enter键进入D盘中CP目录debug子目录中
输入aa.exe 2 3 按Enter键运行你的程序 结果就会出现
2.000000 to the 3.000000 power = 8
Ⅳ 在windows系统下的cmd下面执行php 命令,返回‘PHP’不是内部或外部命令,也不是可运行的程序。。
需要把php.exe设置到环境变量里面,假设你的php.exe路径是D:wampinPHPphp5.5.12
右击“我的电脑-》属性-》高级->环境变量-》系统变量-》PATH-》编辑”,在变量值中添加:
;D:wampinPHPphp5.5.12
重启CMD,输入php -v 测试是否成功。
Ⅵ 如何在cmd命令行下运行php
把你安装后的php.exe文件路径添加到系统PATH下,就行了
Ⅶ 如何使用PHP打开一个新的CMD窗口
<?
execInBackground('startcmd.exe@cmd/k"ping127.0.0.1"');functionexecInBackground($cmd){
枝扮if(substr(php_uname(),0,顷没7)=="Windows"){
雀搭纳pclose(popen("start/B".$cmd,"r"));
}
else{
exec($cmd.">/dev/null&");
}
}
?>
Ⅷ 如何在cmd下面写php代码
首先要把php目录放到环境变量path下面:
我的电脑-》属性-》高级-》环境变量-》系统变量->Path->编辑->
查看路径下有没有php目录,如果没有加上
比如我的php路径是E:AppServphp5 所以要在最后面加上E:AppServphp5;
成功后win+r 调出命令行,输入php-v 查看版本,如果不对请检查坏境变量是否设置正确
运行php文件php-f 路径+文件名 或者php路径+文件名
(小技巧:windows下面可以把文件直接拖进去,省去cd/命令,或者慢慢拼写完整路径)
两种方法都可以执行命令,如果是.php文件则执行php代码,否则直接以字符串形式读取文件
4在命令行直接写并运行PHP代码,在windows环境下,尽量使用双引号, 在linux环境下则尽量使用单引号来完成。php-r “echo getcwd();”
Ⅸ 怎么在CMD里运行PHP
window7解决方案,XP没试,不过想来也是同理,差不了多少:
1、你的php.exe文件的路径,比如d:\php5.3\
2、打开计算机右键 > 属性 > 高级系统设置 > 高级 > 环境变量
3、在系统变量中找到Path看看有没有你的php路径,如果没有,则在Path中加入你的php路径,如:d:\php5.3\,保存即可
4、在cmd命令行下进入到你的站点目录,直接输入文件名即可,如:F:\www\socket>php.exe s.php
Ⅹ PHP使用exec执行cmd命令成功后结果也出来了,但cmd.exe进程一直不结束无法执行后面的代码
你可以试试吧执行的结果写入文件 不然是一直等待返回的