Kairyou's Blog

专注于前端开发, 追求更好的用户体验, 更好的开发体验 [长沙前端QQ群:234746733]
  • PHP 读取大文件的X行到Y行的内容

    / 分类: 开发,实践 / 5 Comments

    最新写了个小程序,需要读取一个文件的几行内容,但是文件比较大,所以研究了下PHP读取大文件的几行内容的方法,写了一个方法,代码如下(加了注释):

    //返回文件从X行到Y行的内容(支持php5、php4)
    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,''
    }

    Ps:
    上面都没加"读取到末尾的判断":!$fp->eof() 或者 !feof($fp),加上这个判断影响效率,自己加上测试很多很多很多行的运行时间就晓得了,而且这里加上也完全没必要。

    从上面的函数就可以看出来使用SplFileObject比下面的fgets要快多了,特别是文件行数非常多、并且要取后面的内容的时候。fgets要两个循环才可以,并且要循环$endLine次。

    此方法花了不少功夫,测试了很多中写法,就是想得出效率最高的方法。哪位觉得有值得改进的欢迎赐教。

    使用,返回35270行-35280行的内容:

    echo '<pre>';var_dump(getFileLines('test.php',35270,35280));
  • 开始尝试使用kissy

    / 分类: 工具 / No Comments

    从kissy suggest出来,我就有种强烈的预感,淘宝团队肯定会整个js库出来,果不其然Kissy问世了。

    我使用kissy的理由:1.kissy的思想我比较喜欢,2.比较轻巧,3.常用的功能都有了,4.如果不满足现有功能方便自己扩展。
    熟悉jquery、yui、mt等类库的人花点时间应该都比较容易上手的。感觉官方的文档还需要改进,如果做到像jq官方那样,花几个小时应该就可以掌握了。
    我找了些可以帮助熟悉kissy的文章:
    http://www.slideshare.net/lijing00333/kissy-5223489
    http://ghsky.com/tag/kissy
    http://lifesinger.org/blog/2010/08/kissy-briefings-2/
    http://lifesinger.org/blog/2010/09/release-kissy-1-1-5/
    http://kissyui.com/blog/
    http://kissyteam.github.com/docs/kissy/quickstart/
    http://kissyteam.github.com/kissy/docs/index.html
    时间允许,以后我会把自己使用遇到的问题或笔记分享出来。

    查看全文 »