exec 或者 system 都可以调用cmd 的命令

直接上代码:

  1. <?php
  2. /** 打开windows的计算器 */
  3. exec('start C:WindowsSystem32calc.exe');
  4.  
  5. /** php生成windows的批处理文件后,再执行这个批处理文件*/
  6. $filename = 't.bat';
  7. $somecontent = 'C:
  8. ';
  9. $somecontent .= 'cd "C:/Program Files/MySQL-Front"';
  10. $somecontent .= '
  11. start MySQL-Front.exe';
  12. if (!$handle = fopen($filename, 'w')) {
  13. echo "不能打开文件 $filename";
  14. exit;
  15. }
  16.  
  17. /** 首先我们要确定文件存在并且可写*/
  18. if (is_writable($filename)) {
  19.  
  20. /** 那就是当我们使用fwrite()的时候,$somecontent将要写入的地方
  21. 将$somecontent写入到我们打开的文件中 。*/
  22. if (fwrite($handle, $somecontent) === FALSE) {
  23. echo "不能写入到文件 $filename";
  24. exit;
  25. }
  26. echo "成功地将 $somecontent 写入到文件 $filename";
  27. fclose($handle);
  28. } else {
  29. echo "文件 $filename 不可写";
  30. }
  31. exec($filename);
  32. ?>

有一个遗留问题,就是exec()调用,php会一直执行,直到你关闭启动的应用程序,这样会造成php执行超时,不知道怎么解决这个问题,希望高手路过此地,留下答案!我日后解决了,也会更新到这里的!

以下来自资料

==================================================

php的内置函数exec,system都可以调用系统命令(shell命令),当然还有passthru,escapeshellcmd等函数。

在很多时候利用php的exec,system等函数调用系统命令可以帮助我们更好更快的完成工作。

注意:要想使用这二个函数 php.ini 中的安全模式必须关闭,要不然为了安全起见php是不让调用系统命令的。

先看一下php手册对这二个函数的解释:

exec --- 执行外部程式

语法 : string exec ( string command [, array &output [, int &return_var]] )

说明 :

exec()执行给予的命令command,不过它并不会输出任何东西,它简单的从命令的结果中传回最后一行,如果你需要去执行一个命令,并且从命令去取得所有资料时,可以使用passthru()这个函数。

如果有给予参数array,则指定的数组将会被命令所输出的每一行填满,注意 : 如果数组先前已经包含了一些元素的话,exec()将会把它附加在数组的后面,如果你不想要此函数附加元素的话,你可以在传递此数组给exec()之前呼叫unset()。

如果有给予参数array和return_var,则传回执行的状态命令将会写到这个变量。

注意: 如果你允许来自使用者输入的资料,可以传递到此函数,那么你应该使用escapeshellcmd( )来确定此使用者无法哄骗(trick)系统来执行武断的(arbitrary)命令。

注意: 如果你使用此函数来启动一个程式,而且希望在背景里(background)执行的时候离开它,你必须确定此程式的输出是转向(redirected)到一个文件或是一些输出的资料流,否则PHP将会悬挂(hang)直到程式执行结束。

system --- 执行外部程式并且显示输出

语法:string system ( string command [, int &return_var] )

说明:

system( )执行给予的命令command,并且输出结果。如果有给予参数return_var,则执行命令的状态码将会写到这个变量。

注意: 如果你允许来自使用者输入的资料,可以传递到此函数,那么你应该使用escapeshellcmd( )来确定此使用者无法哄骗(trick)系统来执行武断的(arbitrary)命令。

注意: 如果你使用此函数来启动一个程式,而且希望在背景里(background)执行的时候离开它,你必须确定此程式的输出是转向(redirected)到一个文件或是一些输出的资料流,否则PHP将会悬挂(hang)直到程式执行结束。

如果PHP是运作成伺服器模组,在输出每一行后,system( )会试着自动地清除web伺服器的输出缓冲。

成功则传回命令的最后一行,失败则传回false。

如果你需要去执行一个命令,并且从命令去取得所有资料时,可以使用passthru( )这个函数。

这二个都是用来调用系统shell命令,

不同点:

exec可以把执行的结果全部返回到$output函数里(数组),$status是执行的状态 0为成功 1为失败

systerm不需要提供$output函数,他是直接把结果返回出来,同样$return_var是执行的状态码 0为成功 1为失败

exec示例:

  1. <?php
  2. $a = exec("dir", $out, $status);
  3. print_r($a);
  4. print_r($out);
  5. print_r($status);
  6. ?>

system示例:

  1. <?php
  2. $a = system("dir", $status);
  3. print_r($a);
  4. print_r($status);
  5. ?>

上面说明看起来有点乱,运行两个例子后,你就会明白的!


【system】

  1. <?php
  2. set_time_limit(0);
  3. define('ROOT_PATH', dirname(__FILE__));
  4.  
  5. include ROOT_PATH . '/include/global.func.php';
  6.  
  7. $cmdTest = 'ps -ef | grep magent';
  8.  
  9. $lastLine = system($cmdTest, $retVal);
  10.  
  11. write_log('$lastLine');
  12. write_log($lastLine);
  13.  
  14. write_log('$retVal');
  15. write_log($retVal);
  16. ?>

输出:

  1. ++++++++++++++++++++++++++++++++++++++++++
  2. 2014-10-15 16:28:52
  3. $lastLine
  4. ++++++++++++++++++++++++++++++++++++++++++
  5. 2014-10-15 16:28:52
  6. root 5375 5373 0 16:28 pts/1 00:00:00 grep magent
  7. ++++++++++++++++++++++++++++++++++++++++++
  8. 2014-10-15 16:28:52
  9. $retVal
  10. ++++++++++++++++++++++++++++++++++++++++++
  11. 2014-10-15 16:28:52
  12. 0

【exec】

  1. <?php
  2. set_time_limit(0);
  3. define('ROOT_PATH', dirname(__FILE__));
  4.  
  5. include ROOT_PATH . '/include/global.func.php';
  6.  
  7. $cmdTest = 'ps -ef | grep magent';
  8.  
  9. $lastLine = exec($cmdTest, $output, $retVal);
  10.  
  11. write_log('$lastLine');
  12. write_log($lastLine);
  13.  
  14. write_log('$output');
  15. write_log($output);
  16.  
  17. write_log('$retVal');
  18. write_log($retVal);
  19. ?>

输出:

  1. ++++++++++++++++++++++++++++++++++++++++++
  2. 2014-10-15 16:25:00
  3. $lastLine
  4. ++++++++++++++++++++++++++++++++++++++++++
  5. 2014-10-15 16:25:00
  6. root 5360 5358 0 16:25 pts/1 00:00:00 grep magent
  7. ++++++++++++++++++++++++++++++++++++++++++
  8. 2014-10-15 16:25:00
  9. $output
  10. ++++++++++++++++++++++++++++++++++++++++++
  11. 2014-10-15 16:25:00
  12. Array
  13. (
  14. [0] => root 2838 1 0 15:39 ? 00:00:00 magent -u root -n 51200 -l 192.168.137.100 -p 12001 -s 192.168.137.100:11211 -b 192.168.137.100:11212
  15. [1] => root 5358 5356 0 16:25 pts/1 00:00:00 sh -c ps -ef | grep magent
  16. [2] => root 5360 5358 0 16:25 pts/1 00:00:00 grep magent
  17. )
  18.  
  19. ++++++++++++++++++++++++++++++++++++++++++
  20. 2014-10-15 16:25:00
  21. $retVal
  22. ++++++++++++++++++++++++++++++++++++++++++
  23. 2014-10-15 16:25:00
  24. 0

结论:

如果需要详细的输出结果,那就用exec()吧!我一般用exec()执行外部命令!

参考:

http://php.net/manual/zh/function.system.php

http://php.net/manual/zh/function.exec.php

PHP exec/system启动windows应用程序,执行.bat批处理,执行cmd命令的更多相关文章

  1. Js使用WScript.Shell对象执行.bat文件和cmd命令

    Js使用WScript.Shell对象执行.bat文件和cmd命令 http://www.jb51.net/article/58669.htm WScript.Shell(Windows Script ...

  2. Javascript中使用WScript.Shell对象执行.bat文件和cmd命令

    WScript.Shell(Windows Script Host Runtime Library)是一个对象,对应的文件是C:/WINDOWS/system32/wshom.ocx,Wscript. ...

  3. 【转】Javascript中使用WScript.Shell对象执行.bat文件和cmd命令

    WScript.Shell(Windows Script Host Runtime Library)是一个对象,对应的文件是C:/WINDOWS/system32/wshom.ocx,Wscript. ...

  4. 使用BAT批处理执行sql语句的代码

    使用BAT批处理执行sql语句的代码 有时候需要执行一些Sql语句时,不想开企业管理器,或者是发给客户执行但那边又不懂代码,这时就可以用下面方法 1.把待执行Sql保存在一个文件,这里为2011022 ...

  5. Windows常用的一些DOS下的CMD命令整理

    Windows常用的一些DOS下的CMD命令整理... -------------- 正斜杠--/////-----向右倒--网址正斜杠反斜杠--\\\\------向左倒--文件路径反斜杠 DOS命 ...

  6. Windows最常用的几个网络CMD命令总结

    Windows最常用的几个网络CMD命令总结 http://www.cnblogs.com/sbaicl/archive/2013/03/05/2944001.html 一.ping 主要是测试本机T ...

  7. 使用Java窗口程序执行输入的任何cmd命令

    利用Java窗口程序来执行用输入的任何命令 实现效果: Java桌面窗口,输入框.按钮,当输入框被输入命令的时候,点击按钮执行命令! 实现代码 package com.remote.remote.ag ...

  8. windows bat 批处理 执行 for 循环无法执行?

    示例:   cmd 命令行可以执行.但是 写成 bat 却不能执行, for /f "delims==" %a in ('dir /b /s F:\F\*.TXT')do copy ...

  9. Windows下Java调用BAT批处理不弹出cmd窗口

    常规Windows下Java调用BAT方式肯定会弹出cmd窗口 Runtime.getRuntime().exec("cmd.exe /C start D:\\test.bat") ...

随机推荐

  1. 【2016-11-13】【坚持学习】【Day25】【Oracle 查询某一字段最大值】

    partition 分组order by 以哪一个字段排序 select n.* ,row_number()over(partition by n.type order by n.createtime ...

  2. codevs 1115 开心的金明--01背包

    1115 开心的金明 2006年NOIP全国联赛普及组  时间限制: 1 s  空间限制: 128000 KB  题目等级 : 黄金 Gold 题目描述 Description 金明今天很开心,家里购 ...

  3. 洛谷P1288 取数游戏II[博弈论]

    题目描述 有一个取数的游戏.初始时,给出一个环,环上的每条边上都有一个非负整数.这些整数中至少有一个0.然后,将一枚硬币放在环上的一个节点上.两个玩家就是以这个放硬币的节点为起点开始这个游戏,两人轮流 ...

  4. docker-compose启动的tomcat无法远程连接jmx

    最近想学习下java GC优化,就用了一下VisualVM,在远程服务器启动了一个非docker的tomcat,很顺利的就连接了,但是用docker-compose启动的服务却 怎么也连不上,一定是d ...

  5. Swift学习(三):闭包(Closures)

    定义 闭包(Closures)是独立的函数代码块,能在代码中传递及使用. 语法 {(parameters) -> return type in statements } 注:闭包表达式语法可以使 ...

  6. .NET 常用框架

    1.Hangfire 2.Lucene.Net 3.Log4Net 4.Quartz.Net 5.Autofac 6.SqlSugar 7.NPOI 8.Senparc.Weixin.MP 9.Aut ...

  7. AD_TLC549采集模拟信号

    AD_TLC549采集模拟信号 实验原理 芯片介绍 TLC549是 TI公司生产的一种低价位.高性能的8位A/D转换器,它以8位开关电容逐次逼近的方法实现 A/D转换,其转换速度小于 17us,最大转 ...

  8. JavaScript禁用回退

    javascript:window.history.forward(1); 比如:当前在B页面,点击后退会回退到A页面,那么该代码写在A页面,然后在B页面就不会回退到A了.

  9. VS 团队资源管理 强制解锁锁定文件

    故事是这样发生的: 以前有台电脑,在团队资源里看程序,可能冥冥中不小心按了个空格,so,文件被锁定 而我却没有发现 如果再给我一个机会,我只想说记得签入 然后,高潮来了 重装电脑 欣喜的装好新机子打开 ...

  10. 【USACO 2.4】Overfencing(bfs最短路)

    H行W列的迷宫,用2*H+1行的字符串表示,每行最多有2*W+1个字符,省略每行后面的空格.迷宫的边界上有且仅有两个出口,求每个点出发到出口的最短路. +-+-+-+-+-+ | | +-+ +-+ ...