根据传入的参数读取Magento错误日志

有时候我们需要用程序读取错误日志显示,因为没有没有系统的权限,团队开发会遇到这种情况,也有可能需要做一个定期发送系统日志到我们邮箱的功能,或者需要分析日志,提取里面的重要信息,就直接读取日志输出,注意做好权限管理,不要直接暴露日志给访客。


<?php
ini_set('display_errors', 1);
header('Content-Type: text/html; charset=utf-8');
include 'app/Mage.php';
Mage::app();

class Test {
    public function get() {
        $file = Mage::getBaseDir('log') . '/system.log';
        
        foreach($this ->getFileLines($file,intval($_GET['start'])*10000,intval($_GET['end'])*10000) as $line){
            echo $line;
        }
    }

    //返回文件从X行到Y行的内容(支持php5、php4)
    public function getFileLines($filename, $startLine = 1, $endLine = 50, $method = 'rb') {
        $content = array();
        $count = $endLine - $startLine;
        if (version_compare(PHP_VERSION, '5.1.0', '>=')) {// 判断php版本(因为要用到SplFileObject,PHP>=5.1.0)
            $fp = new SplFileObject($filename, $method);
            $fp->seek($startLine - 1); // 转到第N行, seek方法参数从0开始计数
            for ($i = 0; $i <= $count; ++$i) {
                $content[] = $fp->current(); // current()获取当前行内容
                $fp->next(); // 下一行
            }
        } else {//PHP<5.1
            $fp = fopen($filename, $method);
            if (!$fp)
                return 'error:can not read file';
            for ($i = 1; $i < $startLine;  ++$i) {// 跳过前$startLine行
                fgets($fp);
            }
            for ($i; $i <= $endLine;  ++$i) {
                $content[] = fgets($fp); // 读取文件行内容
            }
            fclose($fp);
        }
        return array_filter($content); // array_filter过滤:false,null,''
    }
}
$test = new Test();
$test->get();

使用方法,以下参数是读取1万到2万之间的错误信息,哈哈,都按万来计算了

test.php/?start=1&end=2

**原创文章未经同意请勿转载**