PHP打印shell输出,php如何实时显示shell脚本的输出

作者分享了一种方法,如何使用PHP调用shell脚本实现2-3分钟长任务的异步执行,通过输出重定向和实时读取,确保网页能即时显示shell执行的提示信息。通过后台运行shell,配合tail监控输出文件,解决了等待脚本结束的问题。
摘要由CSDN通过智能技术生成

大家好,我现在有一个shell脚本,实现的是一键启动的功能。想要把它做成web版

但是这个脚本执行的时间较长,大概要2-3分钟,期间会echo一些成功的提示信息至屏幕上

但是现在用php来调这个脚本,用的是exec和system,发现要一直等这个脚本全部执行完之后才会在网页上打印出语句

现在我的问题是,可不可以shell打印出一条语句网页上就显示出一条语句,而不是等shell全部执行完后一起显示

谢谢大家!

回复讨论(解决方案)

你的echo语句是shell中的吧,可以这样

调用shell可以加一个输出重定向,追加一个文件中,调用这个shell需要是后台执行。

然后再使用php调用tail命令每一秒读取这个输出文件显示,这里需要设置缓冲区为0,否则也是会等够4096才会显示的。

例如:

exec("/home/web/a.sh >> /home/web/a.log 2>&1 &");

$log = file_get_contents('/home/web/a.log');

这里log你可以把每一行都存入数组,然后每次只echo新的行。

exec和system都是函数

既然是函数,调用时就一定会等待返回

除非被调函数设有回调函数

既然exec和system都没有提供回调函数接口,那么就只有等待他的结束了

你的echo语句是shell中的吧,可以这样

调用shell可以加一个输出重定向,追加一个文件中,调用这个shell需要是后台执行。

然后再使用php调用tail命令每一秒读取这个输出文件显示,这里需要设置缓冲区为0,否则也是会等够4096才会显示的。

例如:

exec("/home/web/a.sh >> /home/web/a.log 2>&1 &");

$log = file_get_contents('/home/web/a.log');

这里log你可以把每一行都存入数组,然后每次只echo新的行。

谢谢您的回复,等我完成这步后再来结贴。如果遇到问题还请赐教

exec和system都是函数

既然是函数,调用时就一定会等待返回

除非被调函数设有回调函数

既然exec和system都没有提供回调函数接口,那么就只有等待他的结束了

谢谢您的回复,等我完成这步后再来结贴。如果遇到问题还请赐教

感谢楼上两位,结贴晚了,问题已经解决

类似于1楼方法

脚本需要后台执行,然后将输出重定向至文件中

php在while中每1s定时读取文件中新增加的内容,此处我记录了文件的偏移量,再fseek来定位

最后遇到代表脚本执行成功的输出时,跳出while,结束

本文原创发布php中文网,转载请注明出处,感谢您的尊重!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值