php读取日志文件

荆轲刺秦王

需要参数: 1:文件路径 2:行数 读多少行 如果输入的行数大于文件实际行数 则读出全部文件

function tailFile( $file, $lines )
    {
        $handle = fopen($file, "r");
        $linecounter = $lines;
        $pos = -2;
        $beginning = false;
        $text = [];
        while ($linecounter > 0) {
            $t = " ";
            while ($t != "\n") {
                if (fseek($handle, $pos, SEEK_END) == -1) {
                    $beginning = true;
                    break;
                }
                $t = fgetc($handle);
                $pos--;
            }
            $linecounter--;
            if ($beginning) {
                rewind($handle);
            }
            $text[$lines - $linecounter - 1] = fgets($handle);
            if ($beginning) {
                break;
            }
        }
        fclose($handle);
        //return array_reverse($text);  // 5,6,7,8,9
        return $text;                   //9,8,7,6,5
    }

在最后的返回结果中有两种格式:

假如都是要返回100行,而文件有超过100行

直接 return 是倒序输出,例如: 9,8,7,6,5

而使用 array_reverse 函数之后,则是: 5,6,7,8,9

再来一个获取所有行的函数:

function getLines( $file )
    {
        $handle = fopen($file, "r");
        $line = 0 ;
        while( fgets($handle,100*1024) ) {
            $line++;
        }
        fclose($handle);
        return $line;
    }

前面有了倒序读文件,再来一个正序读文件,一行一行读:

function readTxt( $path, $rows )
    {
        $arr    = [];
        $file     = fopen($path,"r");

        for( $i=0; $i<$rows; $i++ ){
            $arr[$i] = trim(fgets($file,100*1024));//fgets()函数从文件指针的第一行读取
            $i++;
        }

        fclose($file);
        return $arr;
    }

同理,如果不需要行号 读取全部内容的话,只需将 for 虚幻 换为 while 循环 条件是:  !feof( $file )

 

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
首先,为了防止 502 错误,我们需要使用 AJAX 技术来实现页面的异步加载。这样,页面就不会在读取文件的时候被阻塞。 其次,我们需要使用 PHP读取文件,并将读取到的内容返回给前端。我们可以使用 `fopen` 函数打开文件,并使用 `fgets` 函数逐行读取文件内容。读取到一行内容后,我们将其返回给前端。 最后,我们需要使用 jQuery 来实现页面的异步加载。我们可以使用 `setInterval` 函数定时向后端发送 AJAX 请求,获取最新的文件内容,并将其添加到页面上。 下面是一个示例代码: HTML 页面: ```html <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title>实时读取超大文件日志</title> <script src="https://code.jquery.com/jquery-3.5.1.min.js"></script> </head> <body> <h1>实时读取超大文件日志</h1> <div id="log"></div> <script> $(function() { setInterval(function() { $.ajax({ url: 'read_log.php', type: 'GET', success: function(data) { $('#log').append(data); } }); }, 1000); }); </script> </body> </html> ``` PHP 后端代码: ```php <?php $filename = '/path/to/large/file.log'; $handle = fopen($filename, 'r'); if ($handle) { while (($line = fgets($handle)) !== false) { echo "<p>{$line}</p>"; ob_flush(); flush(); } fclose($handle); } ?> ``` 在 PHP 代码中,我们使用了 `ob_flush` 和 `flush` 函数来实现页面的实时输出。这两个函数可以将 PHP 输出缓存中的内容立即发送到浏览器端,避免 PHP 脚本在读取文件时超时或者阻塞。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值