php实现shell的tail,读取文本倒数$n行
时间:2008-06-05
来源:互联网
如果文件超级大,比如我们公司的日访问日志就接近10G,如果要分析这些日志的时候用PHP的file来分析就超级闷,甚至可能机器直接down了,当然如果你会shell那就非常方便了,shell的tail非常方便,我只是用PHP实现了tail的功能
,肯定有更好的解决方案,如果有希望能贡献出来,小弟虚心讨教
[ 本帖最后由 edwardhey 于 2008-6-5 14:57 编辑 ]
复制PHP内容到剪贴板
* 读取文本倒数$n行
*
* @param string $filename
* @param int $n $n不能大于10
* @return array
*/
function tail($filename,$n)
{
$fp = fopen($filename, 'rb');
$n = (int)$n;
if($n>10) trigger_error("取文件倒数N行的时候,不能大于10行", E_USER_ERROR);
if ($fp) {
flock($fp, LOCK_SH);
$i = -2;//从第二个字符开始,因为最后一个是"\n"
fseek($fp,$i,SEEK_END);
$buffer = array();
while ($n>=0) {
fseek($fp,$i--,SEEK_END);
if(fgetc($fp)=="\n") {
$buffer[] = fgets($fp,1024);
$n--;
}
}
flock($fp, LOCK_UN);
fclose($fp);
unset($tmp);
return $buffer;
} else {
return false;
}
}
有什么问题欢迎到我博客拍砖,交流~PHP代码:
/*** 读取文本倒数$n行
*
* @param string $filename
* @param int $n $n不能大于10
* @return array
*/
function tail($filename,$n)
{
$fp = fopen($filename, 'rb');
$n = (int)$n;
if($n>10) trigger_error("取文件倒数N行的时候,不能大于10行", E_USER_ERROR);
if ($fp) {
flock($fp, LOCK_SH);
$i = -2;//从第二个字符开始,因为最后一个是"\n"
fseek($fp,$i,SEEK_END);
$buffer = array();
while ($n>=0) {
fseek($fp,$i--,SEEK_END);
if(fgetc($fp)=="\n") {
$buffer[] = fgets($fp,1024);
$n--;
}
}
flock($fp, LOCK_UN);
fclose($fp);
unset($tmp);
return $buffer;
} else {
return false;
}
}

[ 本帖最后由 edwardhey 于 2008-6-5 14:57 编辑 ]
作者: edwardhey 发布时间: 2008-06-05

作者: luzhou 发布时间: 2008-06-05
相关阅读 更多
热门阅读
-
office 2019专业增强版最新2021版激活秘钥/序列号/激活码推荐 附激活工具
阅读:74
-
如何安装mysql8.0
阅读:31
-
Word快速设置标题样式步骤详解
阅读:28
-
20+道必知必会的Vue面试题(附答案解析)
阅读:37
-
HTML如何制作表单
阅读:22
-
百词斩可以改天数吗?当然可以,4个步骤轻松修改天数!
阅读:31
-
ET文件格式和XLS格式文件之间如何转化?
阅读:24
-
react和vue的区别及优缺点是什么
阅读:121
-
支付宝人脸识别如何关闭?
阅读:21
-
腾讯微云怎么修改照片或视频备份路径?
阅读:28