php popen 参数,popen实现PHP并发方法 | 学步园

用途: 当业务需要调用一个比较耗时外部资源时使用, 最常见的是从外部API获取相关内容

使用方法:

1. 建立外部资源脚本。 如示例中使用t.sh。 当然, 也可以直接使用curl等命令行

2. 准备好参数, 提供给pipe脚本

2. 使用popen调用脚本。 调用之后,就不用关心了。

3. 开始其他的和pipe不相关的逻辑处理

4. 其他处理完成之后, 使用fgets等方式,获取popen的数据

示例代码:

php程序:

# get argument for pipe here if it has.

#start pipe

echo 'call popen start: '. date("H:i:s"), "/n";

$pipe = popen(dirname(__FILE__) . '/t.sh', 'r');

echo 'call popen end: '. date("H:i:s"), "/n";

#Other code here

sleep(5);

echo "Here is my code. time: " . date("H:i:s"), "/n";

#read pipe result

while ($s = fgets($pipe,1024)) {

echo $s;

}

pipe脚本:

echo 1, `date +%T`;

sleep 1;

echo 2, `date +%T`;

sleep 10;

echo 3, `date +%T`;

输出如下:

call popen start: 10:16:40

call popen end: 10:16:40

Here is my code. time: 10:16:45

1, 10:16:40

2, 10:16:41

3, 10:16:51

代码方面, 我们有三个sleep。

php中一个 sleep 5,

sh中两个sleep, 10+1

如果使用串行的方式, 那么用时应该是10+1+5 = 16秒。

而使用pipe方式, 用时仅为:max(php, pipe) = max(5,11) = 11秒。

PS:很抱歉,空间服务商看起来不喜欢popen这个字眼, 所以只能将起替换成全角的了。请在使用时,替换一下吧:)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值