php外部系统命令执行函数

总结一下php中常用的执行函数,一篇水文

一、system()函数

(PHP 4, PHP 5, PHP 7)

  • 介绍:执行外部程序,并且显示输出

  • 说明

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

同 C 版本的 system() 函数一样,本函数执行 command 参数所指定的命令,并且输出执行结果。
如果 PHP 运行在服务器模块中, system() 函数还会尝试在每行输出完毕之后,自动刷新 web 服务器的输出缓存。
该函数执行后,直接在终端窗口打印命令执行的结果
如果要获取一个命令未经任何处理的原始输出,请使用 passthru() 函数。

  • 参数
    command
    要执行的命令。
    return_var
    如果提供 return_var 参数,则外部命令执行后的返回状态将会被设置到此变量中。
  • 返回值
    成功则返回命令输出的最后一行,失败则返回 FALSE
<?php
system('whoami');
?>

二、passthru()函数

(PHP 4, PHP 5, PHP 7)

  • 介绍:执行外部程序并且显示原始输出

  • 说明

passthru( string $command[, int &$return_var] ) : void

同 exec() 函数类似, passthru() 函数也是用来执行外部命令(command)的。当所执行的 Unix 命令输出二进制数据,并且需要直接传送到浏览器的时候,需要用此函数来替代 exec() 或 system() 函数。常用来执行诸如 pbmplus 之类的可以直接输出图像流的命令。通过设置 Content-type 为 image/gif,然后调用 pbmplus 程序输出 gif 文件,就可以从 PHP 脚本中直接输出图像到浏览器。

  • 参数
    command
    要执行的命令。
    return_var
    如果提供 return_var 参数, Unix 命令的返回状态会被记录到此参数。
  • 返回值
    没有返回值。
<?php
passthru('whoami');
?>

三、exec()函数

(PHP 4, PHP 5, PHP 7)

  • 介绍:执行一个外部程序
  • 说明
exec( string $command[, array &$output[, int &$return_var]] ) : string
exec() 执行 command 参数所指定的命令。 
  • 参数
    command
    要执行的命令。
    output
    如果提供了 output 参数,那么会用命令执行的输出填充此数组,每行输出填充数组中的一个元素。数组中的数据不包含行尾的空白字符,例如 \n 字符。请注意,如果数组中已经包含了部分元素,exec() 函数会在数组末尾追加内容。如果你不想在数组末尾进行追加,请在传入 exec() 函数之前对数组使用 unset() 函数进行重置。
    return_var
    如果同时提供 output 和 return_var 参数,命令执行后的返回状态会被写入到此变量。
  • 返回值
    命令执行结果的最后一行内容。如果你需要获取未经处理的全部输出数据,请使用 passthru() 函数。
    如果想要获取命令的输出内容,请确保使用 output 参数。
  • 总结:执行系统命令,但它并不会自己输出,需要配合echo/print例:
<?php
echo exec('whoami');
或将获取的数据传入一个数组
exec('ipconfig',$out);
var_dump($out);
?>

四、shell_exec

(PHP 4, PHP 5, PHP 7)

  • 介绍:通过 shell 环境执行命令,并且将完整的输出以字符串的方式返回。
  • 说明
shell_exec( string $cmd) : string
本函数同 执行操作符。 
  • 参数
    cmd
    要执行的命令。
  • 返回值
    命令执行的输出。如果执行过程中发生错误或者进程不产生输出,则返回 NULL。
  • Note
    当进程执行过程中发生错误,或者进程不产生输出的情况下,都会返回 NULL,所以,使用本函数无法通过返回值检测进程是否成功执行。如果需要检查进程执行的退出码,请使用 exec() 函数。
  • 总结:该函数也可执行系统命令,同exec()函数一样,需要使用配合echo/print来输出显示内容
<?php
echo shell_exec('whoami');
?>

五、反撇号:`

与shell_exec函数的功能相同。
shell_exec其实是它的变体,使用方法和shell_exec一样,例:

<?php
echo `whoami`;
?>

六、区别比较

(1)system与passthru的区别
passthru可以输出二进制数据,例如图像数据
(2)exec与shell_exec的区别
exec只能将获取的数据返回其中最后一行数据,而shell_exec可以将获取的数据全部返回

<?php
echo exec('ipconfig');
//echo shell_exec('ipconfig');
?>

:输出和返回值是不同的,返回值是保存在内存中,需要使用echo/print来输出才可,这样就可以理解例如system函数为什么执行系统命令后,输出命令的结果,却不是输出它的返回值(也就是他所说的最后一行数据)
举个例子就懂了,比较下方两个代码的输出即可理解,例:

<?php
system('whoami');
?>

<?php
echo system('whoami');
?>

你也可以使用ipconfig或ifconfig来对比,看最后两行即可

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

1stPeak

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值