首页
登录 | 注册

三个PHP调用系统命令函数的区别与联系

我们在执行linux系统的shell命令时,会用到PHP调用系统命令函数来实现。那么在这些函数中,主要包括了system(),exec(),passthru()这三个经常用于外部命令调用的函数。

  • PHP函数str_replace的具体功能详解
  • PHP字符串替换函数strtr()的功能实现讲解
  • PHP中文处理工具函数的用法总结
  • PHP正则模式修正符的具体应用方式分析
  • PHP函数echo()的定义和用法解析
虽然这三个命令都能执行linux系统的shell命令,但是其实他们是有区别的:

system() 输出并返回最后一行shell结果。

exec() 不输出结果,返回最后一行shell结果,所有结果可以保存到一个返回的数组里面。

passthru() 只调用命令,把命令的运行结果原样地直接输出到标准输出设备上。

相同点:都可以获得命令执行的状态码

在PHP中调用外部命令,可以用如下三种方法来实现:

用PHP提供的专门函数

PHP提供共了3个专门的执行外部命令的PHP调用系统命令函数:system(),exec(),passthru()。

system()
 

原型:string system (string command [, int return_var])
 

system()函数很其它语言中的差不多,这个PHP调用系统命令函数执行给定的命令,输出和返回结果。第二个参数是可选的,用来得到命令执行后的状态码。
 

例子:

system("/usr/local/bin/webalizer/webalizer");

exec()

原型:string exec(string command [, string array [, int return_var]])
 

exec()函数与system()这个PHP调用系统命令函数类似,也执行给定的命令,但不输出结果,而是返回结果的最后一行。虽然它只返回命令 结果的最后一行,但用第二个参数array 可以得到完整的结果,方法是把结果逐行追加到array的结尾处。所以如果array不是空的,在调用之前最好用unset()最它清掉。只有指定了第二 个参数时,才可以用第三个参数,用来取得命令执行的状态码。
 

例子:

exec("/bin/ls -l");
exec("/bin/ls -l", $res);
exec("/bin/ls -l", $res, $rc);

passthru()
 

原型:void passthru (string command [, int return_var])
passthru ()只调用命令,这个PHP调用系统命令函数不返回任何结果,但把命令的运行结果原样地直接输出到标准输出设备上。所以passthru()函数经常用来 调用象pbmplus (Unix下的一个处理图片的工具,输出二进制的原始图片的流)这样的程序。同样它也可以得到命令执行的状态码。
 

例子:

header("Content-type: image/gif");
passthru("./ppmtogif hunte.ppm");

以上就是三个PHP调用系统命令函数的工能对比,希望对大家有所帮助。


相关文章

  • GNU 通过 __atttribute__ 扩展的 format 属性,用来指定变参函数的参数格式检查. 我们经常实现一些自己的打印调试函数.这些打印函数往往是变参函数,那编译器编译程序时,怎么知道我们的参数格式对不对呢?因为我们实现的是变 ...
  • 首先说做SSLVPN客户端的真苦逼,不断对付windows的升级,ie的升级,杀软的阻挠. 最近发现win8下sslvpn客户端可以安装,不能使用.调试了一下,发现js根本没有调用. 经过和vip菜鸟的讨论,他也没发现代码问题,但是建议根据 ...
  • java跨平台的特性使Java越来越受开发人员的欢迎,但也往往会听到不少的抱怨:用Java开发的图形用户窗口界面每次在启动的时候都会跳出一个控制台窗口,这个控制台窗口让本来非常棒的界面失色不少.怎么能够让通过Java开发的GUI程序不弹出J ...
  • 剑客一直说我写的blog属于阳春白雪,很少有人看懂,以后尽量向大家灌输一些基础知识. c语言通过jvm环境可以调用java类,我以前的blog写过.http://blogger.org.cn/blog/more.asp?name=hongr ...
  • 1.编写c++用例 test.h #include using namespace std; class MyClass { public:     MyClass();     ~MyClass();     unsigned char ...
  • 实验环境:CentOS 6.7 1. 安装Ruby CentOS 6.7中默认安装的是Ruby 1.8,安装最新版2.2.3. root [ ~ ]# wget https://cache.ruby-lang.org/pub/ruby/2. ...

2020 unjeep.com webmaster#unjeep.com
12 q. 0.013 s.
京ICP备10005923号