触发php,PHP触发脚本异步执行

这篇博客介绍了PHP中用于执行命令行脚本的几个函数,如shell_exec(), exec(), passthru()和system(),并展示了如何通过>/dev/null 2>&1来忽略脚本的执行结果。通过这种方式,可以触发脚本执行而无需等待或处理返回的输出。
摘要由CSDN通过智能技术生成

我们先来了解一下可使用的函数

【shell_exec()】

通过 shell 环境执行命令,并且将完整的输出以字符串的方式返回。

也就是说, PHP先运行一个shell环境, 然后让shell进程运行你的命令, 并且把所有输出已字符串形式返回, 如果程序执行有错误或者程序没有任何输出, 则返回null.

【exec()】

string exec ( string $command [, array &$output [, int &$return_var ]] )

与 shell_exec() 不一样, exec不会创建shell进程, 可以理解是php进程直接创建一个子进程, 运行指定的命令, 返回值只返回命令的最后一行, 所有的返回已参数形式返回, 上面的 $output, 进程的退出代码以另外一个参数变量返回, 上面的 $return_var

【passthru()】

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

与 exec() 类似, 唯一不同的是, 命令的所有输出返回内容都不再导入到 PHP 环境, 而是直接作为输出内容, 返回到浏览器的输出上, 等效是把所有返回内容直接 echo 输出.

【system()】

这个方法和 passthru() 类似, 但是 system() 方法会在程序的每行输出的时候执行一次缓存输出动作, 可以理解为, 只要外部程序输出一行, php 就会马上把内容推送到浏览器, 无论这个内容是否足够大. php通常为了输出效率, 都会有一个输出缓存, 会等到输出内容足够大之后, 再一次输出返回. system() 方法则强制输出内容立刻推送, 即使输出的内容只有一个字母. 如果客户端具有实时打印服务器的返回 http 内容流的能力, 就可以看到 system() 的实时推送效果.

通过这些函数,我们可以在服务器上执行一些脚本,但是这些函数都需要同步等待执行结果。现在回到问题上,我们只想触发这个脚本,并不想关注实际的执行结果要怎么实现呢?其实是很简单的,只需要在执行的脚本后面加个参数即可:

>/dev/null 2>&1

例如:我们需要执行/tmp/resume.sh这个脚本

/tmp/resume.sh >/dev/null 2>&1

或者:

/tmp/resume.sh >/dev/null 2>/dev/null &

还可以:

/tmp/resume.sh &>/dev/null &

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值