php popen参数,php中popen,exec,system,passthru区别

system()

string system (string command [, int return_var])

system()函数很其它语言中的差不多,它执行给定的命令,输出和返回结果。第二个参数是可选的,用来得到命令执行后的状态码。(system和exec的区别在于system在执行系统外部命令时,直接将结果输出到浏览器,不需要使用 echo 或 return 来查看结果,如果执行命令成功则返回true,否则返回false。第二个参数与exec第三个参数含义一样)

??? 返回结果

??????? 成功返回0,

??????? 失败(命令不存在等原因) ? 返回 ? 非0值

exec()

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

exec ()函数与system()类似,也执行给定的命令,但不输出结果,而是返回结果的最后一行。虽然它只返回命令结果的最后一行,但用第二个参数array 可以得到完整的结果,方法是把结果逐行追加到array的结尾处。所以如果array不是空的,在调用之前最好用unset()最它清掉。只有指定了第二 个参数时,才可以用第三个参数,用来取得命令执行的状态码。(exec 执行系统外部命令时不会输出结果,而是返回结果的最后一行,如果你想得到结果你可以使用第二个参数,让其输出到指定的数组,此数组一个记录代表输出的一行,即如果输出结果有20行,则这个数组就有20条记录,所以如果你需要反复输出调用不同系统外部命令的结果,你最好在输出每一条系统外部命令结果时清空这个数组,以防混乱。第三个参数用来取得命令执行的状态码,通常执行成功都是返回0) 例子:

exec("/bin/ls -l");

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

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

passthru

passthru与system的区别,passthru直接将结果输出到浏览器,不需要使用 echo 或 return 来查看结果,不返回任何值,且其可以输出二进制,比如图像数据。

popen

exec/system/passthru函数实际上都是调用VCWD_POPEN去执行命令,exec/system/passthru之间的区别我不感兴趣,我感兴趣的是popen和他们三的区别:

1.popen的mode参数是可以手动设置的"r"/"w",另外三只能是"r"(windows下是"rb")

2.popen没有读取和关闭管道,另外三是立即读取管道然后关闭管道

所以popen不会等待程序执行完成,而另外三必须等程序执行完成(推向后台的程序除外)。那如果popen打开了一个推向后台(mycmd &)的程序,然后又没有重定向stdout/stderr,那么当mycmd产生输出的时候,也就是想管道写入的时候,php引擎会收到SIGPIPE信号,然后中断程序,简单的说就是:程序在写一个读端被关闭的管道,会产生SIGPIPE信号。如果没推向后端,php会等待他调用的系统popen打开的命令返回才能收工,所以会卡在pclose或者没有pclose就在你的程序最后。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值