PHP exec/system启动windows应用程序,执行.bat批处理,执行cmd命令
exec 或者 system 都可以调用cmd 的命令
直接上代码:
<?php
/** 打开windows的计算器 */
exec('start C:WindowsSystem32calc.exe'); /** php生成windows的批处理文件后,再执行这个批处理文件*/
$filename = 't.bat';
$somecontent = 'C:
';
$somecontent .= 'cd "C:/Program Files/MySQL-Front"';
$somecontent .= '
start MySQL-Front.exe';
if (!$handle = fopen($filename, 'w')) {
echo "不能打开文件 $filename";
exit;
} /** 首先我们要确定文件存在并且可写*/
if (is_writable($filename)) { /** 那就是当我们使用fwrite()的时候,$somecontent将要写入的地方
将$somecontent写入到我们打开的文件中 。*/
if (fwrite($handle, $somecontent) === FALSE) {
echo "不能写入到文件 $filename";
exit;
}
echo "成功地将 $somecontent 写入到文件 $filename";
fclose($handle);
} else {
echo "文件 $filename 不可写";
}
exec($filename);
?>
有一个遗留问题,就是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示例:
<?php
$a = exec("dir", $out, $status);
print_r($a);
print_r($out);
print_r($status);
?>
system示例:
<?php
$a = system("dir", $status);
print_r($a);
print_r($status);
?>
上面说明看起来有点乱,运行两个例子后,你就会明白的!
【system】
<?php
set_time_limit(0);
define('ROOT_PATH', dirname(__FILE__)); include ROOT_PATH . '/include/global.func.php'; $cmdTest = 'ps -ef | grep magent'; $lastLine = system($cmdTest, $retVal); write_log('$lastLine');
write_log($lastLine); write_log('$retVal');
write_log($retVal);
?>
输出:
++++++++++++++++++++++++++++++++++++++++++
2014-10-15 16:28:52
$lastLine
++++++++++++++++++++++++++++++++++++++++++
2014-10-15 16:28:52
root 5375 5373 0 16:28 pts/1 00:00:00 grep magent
++++++++++++++++++++++++++++++++++++++++++
2014-10-15 16:28:52
$retVal
++++++++++++++++++++++++++++++++++++++++++
2014-10-15 16:28:52
0
【exec】
<?php
set_time_limit(0);
define('ROOT_PATH', dirname(__FILE__)); include ROOT_PATH . '/include/global.func.php'; $cmdTest = 'ps -ef | grep magent'; $lastLine = exec($cmdTest, $output, $retVal); write_log('$lastLine');
write_log($lastLine); write_log('$output');
write_log($output); write_log('$retVal');
write_log($retVal);
?>
输出:
++++++++++++++++++++++++++++++++++++++++++
2014-10-15 16:25:00
$lastLine
++++++++++++++++++++++++++++++++++++++++++
2014-10-15 16:25:00
root 5360 5358 0 16:25 pts/1 00:00:00 grep magent
++++++++++++++++++++++++++++++++++++++++++
2014-10-15 16:25:00
$output
++++++++++++++++++++++++++++++++++++++++++
2014-10-15 16:25:00
Array
(
[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
[1] => root 5358 5356 0 16:25 pts/1 00:00:00 sh -c ps -ef | grep magent
[2] => root 5360 5358 0 16:25 pts/1 00:00:00 grep magent
) ++++++++++++++++++++++++++++++++++++++++++
2014-10-15 16:25:00
$retVal
++++++++++++++++++++++++++++++++++++++++++
2014-10-15 16:25:00
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命令的更多相关文章
- Js使用WScript.Shell对象执行.bat文件和cmd命令
Js使用WScript.Shell对象执行.bat文件和cmd命令 http://www.jb51.net/article/58669.htm WScript.Shell(Windows Script ...
- Javascript中使用WScript.Shell对象执行.bat文件和cmd命令
WScript.Shell(Windows Script Host Runtime Library)是一个对象,对应的文件是C:/WINDOWS/system32/wshom.ocx,Wscript. ...
- 【转】Javascript中使用WScript.Shell对象执行.bat文件和cmd命令
WScript.Shell(Windows Script Host Runtime Library)是一个对象,对应的文件是C:/WINDOWS/system32/wshom.ocx,Wscript. ...
- 使用BAT批处理执行sql语句的代码
使用BAT批处理执行sql语句的代码 有时候需要执行一些Sql语句时,不想开企业管理器,或者是发给客户执行但那边又不懂代码,这时就可以用下面方法 1.把待执行Sql保存在一个文件,这里为2011022 ...
- Windows常用的一些DOS下的CMD命令整理
Windows常用的一些DOS下的CMD命令整理... -------------- 正斜杠--/////-----向右倒--网址正斜杠反斜杠--\\\\------向左倒--文件路径反斜杠 DOS命 ...
- Windows最常用的几个网络CMD命令总结
Windows最常用的几个网络CMD命令总结 http://www.cnblogs.com/sbaicl/archive/2013/03/05/2944001.html 一.ping 主要是测试本机T ...
- 使用Java窗口程序执行输入的任何cmd命令
利用Java窗口程序来执行用输入的任何命令 实现效果: Java桌面窗口,输入框.按钮,当输入框被输入命令的时候,点击按钮执行命令! 实现代码 package com.remote.remote.ag ...
- windows bat 批处理 执行 for 循环无法执行?
示例: cmd 命令行可以执行.但是 写成 bat 却不能执行, for /f "delims==" %a in ('dir /b /s F:\F\*.TXT')do copy ...
- Windows下Java调用BAT批处理不弹出cmd窗口
常规Windows下Java调用BAT方式肯定会弹出cmd窗口 Runtime.getRuntime().exec("cmd.exe /C start D:\\test.bat") ...
随机推荐
- 【转载、推荐】不要自称是程序员,我十多年的 IT 职场总结
注评:一气读完后,有些和我的观点类似.这篇文章显然是外国老写的,但是不妨碍我们的跨国交流. 如果我可以给每个工程教育增加一门课,它不会涉及编译器.门电路或是时间复杂度,而是一门介绍行业现实的入门课,因 ...
- c# 调用c++DLL方法及注意事项
引用命名空间 using System.Runtime.InteropServices 调用方法: 一.静态加载 用DllImprot方式来加载c++DLL.如下格式: //对应c++方法 //voi ...
- css设置select高度(IE,FF,Chrome)[转]
大家都知道select是无法设置高度和边框颜色等等的在ie67下面,其他的都是可以的,所以有时候为了在所有的浏览器下显示都一致,就使用了 js的模拟,这个是大家经常碰到的,js不光要模拟外观还有模拟事 ...
- javascript马赛克遮罩图片切换效果:XMosaic.js(转)
新鲜出炉的javascript图片切换特效,实现的是马赛克遮罩切换.在flash里,好实现遮罩动画很简单,不过JS实现起来就有些困难了. XMosaic.js,与XScroll.js和XScroll2 ...
- WCF中的错误及解决办法
一 . HTTP 无法注册 URL http://+:8000/Users/.进程不具有此命名空间的访问权限今天按照网上的例子开始学习WCF程序,运行的时候却发现出如下问题:HTTP 无法注册 ...
- ModernUI教程:独立显示器DPI感知
独立显示器DPI感知,是在Windows 8.1中新增的特性,这个特性针对拥有多个显示器同时各个显示器的DPI设定又不同的人.对这个新特性做了优化支持的软件能够在一个高DPI的显示器 ...
- Fluent Nhibernate之旅(五)--利用AutoMapping进行简单开发
Fluent Nhibernate(以下简称FN)发展到如今,已经相当成熟了,在Nhibernate的书中也相应的推荐了使用FN来进行映射配置,之前写的FN之旅至今还有很多人会来私信我问题,说来惭愧, ...
- 建模算法(七)——排队论模型
(一)基本概念 一.排队过程的一般表示 凡是要求服务的对象称为顾客,凡是为顾客服务的称为服务员 二.排队系统的组成和特征 主要由输入过程.排队规则.服务过程三部分组成 三.排队模型的符号表示 1.X: ...
- 利用ucenter整合discuz数据
由于项目需要,需要用到discuz论坛用户的数据,所以想到利用ucenter获取数据.以下为整合ucenter的过程. 1.首先你需要下载官方demo:http://faq.comsenz.com/l ...
- P2有什么用
今天我们学习第二个主题:组织主题 PRINCE2中指出,发起项目的组织需要将工作分配给各级经理,负责推进项目指导完成.项目是跨职能的,因此正常的直线型职能机构并不适合项目,组织主题描述了为有效管理项目 ...