我用php怎么来后去tail -f的结果 例如有tail -f a.logphp怎么可以实现获取tail -f a.log里边的内容并实时返回到网页中? 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 file_get_contents('/var/log/a.log'); 不行吗?之前先给a.log增加一个读的权限。 这个是我的一个比方,例如有一个程序./a.py它会不时的打印出来一些数据,我要把这些数据实时的展示在前端。 那就ajax,每隔60秒,重新读取a.py这个文件,可以用file_get_contents(),fopen()之类的。 py是个程序,如果是输出到std.out,可能要外部调用如果a.py是后台运行,只能抓输出的log文件了 就是类似tail -f ,只不过我要把显示在屏幕中的内容显示在网页中。 参考手册 进程控制扩展 - System program execution 一章但确实不推荐这么做,尤其外部程序是个长时间运行的程序,php调用没什么用 $logpath = 'a.log'$read_line = '80';$output = shell_exec('sudo tail -n'.$read_line.' '.$logpath);$log_array = explode(PHP_EOL, trim($output));$content = array();foreach($log_array as $val){ $content[]=trim($val);}unset($log_array);var_dump($content); tail读取的时间几乎可以忽略不计 纯理论解释,没试过,但我觉得可能也靠谱,你可以做个popen,然后循环fread和echo,别设置缓存,应该可以实时输出到屏幕上,但是也别忘了设置时间超时为0。如果这个不行,那也可以通过popen一个“nohup tail -f xxx & > xxx”文件的后台进程,循环读这个文件,然后echo到屏幕不就行了么,当然,想echo的东西显示到屏幕,就别设置cache,否则就别忘了ob_flush和flush。最后,还是建议ajax,这种用户体验太差了 这里第一次说的popen就是指popen你的tail -f xxx进程 shell_exec应该是等执行完了才返回的,可能和楼主说的意思不太一样,但是,我觉得你这个配合ajax比楼主的方案更靠谱一些~~ http1.1协议貌似限定浏览器每次只能最多接收两个请求(我试的结果,每次只能1个请求),如果不用ajax,会造成只要这个页面开着,你其他请求都发不出去的窘境当然,不止一个服务器并有负载均衡策略就另当别论了 恩 如果实时去读的话 用ajax加上setTimeout即可 任意二级域名的伪静态规则难题,请高手们帮忙 请教一个问题。 数组减少 php分页问题 求解一正则! php可以修改linux下的dns配置吗?? 如何從以下變為, Fasttemplate究竟是干嘛用的??? PHP文件包含的问题 php echo alert 怎么显示字符串啊? 登录征婚网时,页面右下角有时会弹出某某某正在查看您的资料,这种效果是如何实现的? 碶如何替换成矸,高手请教
之前先给a.log增加一个读的权限。
./a.py它会不时的打印出来一些数据,我要把这些数据实时的展示在前端。
如果a.py是后台运行,只能抓输出的log文件了
但确实不推荐这么做,尤其外部程序是个长时间运行的程序,php调用没什么用
$read_line = '80';
$output = shell_exec('sudo tail -n'.$read_line.' '.$logpath);
$log_array = explode(PHP_EOL, trim($output));
$content = array();
foreach($log_array as $val){
$content[]=trim($val);
}
unset($log_array);
var_dump($content);
最后,还是建议ajax,这种用户体验太差了
这里第一次说的popen就是指popen你的tail -f xxx进程
shell_exec应该是等执行完了才返回的,可能和楼主说的意思不太一样,但是,我觉得你这个配合ajax比楼主的方案更靠谱一些~~
http1.1协议貌似限定浏览器每次只能最多接收两个请求(我试的结果,每次只能1个请求),如果不用ajax,会造成只要这个页面开着,你其他请求都发不出去的窘境当然,不止一个服务器并有负载均衡策略就另当别论了