本文操作环境:linux5.9.8系统,php7.1版,Dell G3电脑。
php怎么实现linux命令?
PHP实现linux命令tail -f
今天突然想到之前有人问过我的一个问题,如何通过PHP实现linux中的命令tail -f
,这里就来分析实现下。
这个想一想也挺简单,通过一个循环检测文件,看文件的大小是否有变化,如果有变化,输出文件变化的部分,当然了这里面会有好多的细节,这里具体分析下。
这个时候一下输出好多内容可能看不清,因此我这里设置了一个阈值8192
,当内容长度超过这个阈值的时候,只输出最后面的8192
个字节,这样就不会出现大面积的刷新导致看不清的问题。
这个问题是这个程序的核心,能不能成功,性能的好坏就靠这部分了。
我在这里的实现是下面这样:
$fp
,这里要注意,这里的文件句柄全程需中只打开一次关闭一次,因此要将他放在循环的外面。file_size
和file_size_new
都为0。
file_size_new
文件大小,这里要注意,php中获取文件大小之前一定要运行函数clearstatcache()
,清除文件状态缓存,否则获取文件大小可能会有偏差。add_size = file_size_new - file_size
,看文件大小是否有变化,如果有变化,将文件指针移动到指定位置,然后输出新加的内容,更新file_size
值为new_file_size
。#!/usr/bin/env php 0){ if($add_size > MAX_SHOW){ $ignore_size = $add_size - MAX_SHOW; $add_size = MAX_SHOW; fseek($fp, $file_size + $ignore_size); } fwrite( STDOUT, fread($fp, $add_size) ); $file_size = $file_size_new; } usleep(50000); } fclose($fp);
代码实现这里第一行的#!/usr/bin/env php
是告诉可执行文件,可执行文件php
在系统PATH
中查找,这样的好处就是移植性好。
查了PHP官方手册,fseek
函数这里可以改进改进,这个函数还接受第三个参数,表示偏移指针的类型,默认是SEEK_SET
,从开始偏移,还可以设置为SEEK_CUR
,表示从当前位置偏移,因此这里改为fseek($fp, $ignore_size, $ignore_size);
名称栏目:php怎么实现linux命令
网址分享:http://www.mswzjz.cn/qtweb/news3/350003.html
攀枝花网站建设、攀枝花网站运维推广公司-贝锐智能,是专注品牌与效果的网络营销公司;服务项目有等
声明:本网站发布的内容(图片、视频和文字)以用户投稿、用户转载内容为主,如果涉及侵权请尽快告知,我们将会在第一时间删除。文章观点不代表本网站立场,如需处理请联系客服。电话:028-86922220;邮箱:631063699@qq.com。内容未经允许不得转载,或转载时需注明来源: 贝锐智能