zoukankan      html  css  js  c++  java
  • [获取行数]php读取大文件提供性能的方法,PHP的stream_get_line函数读取大文件获取文件的行数的方...

    背景:
    下面是获取文件的行数的方法:
    一个文件如果知道有几行的话,就可以控制获取一定的行数的数据,然后放入数据库。这样不管的读取大文件的性能,还是写入数据库的性能,都能得到很大的提高了。
    下面是获取文件的行数的方法

    $temp_file = 'error.log';
    $fp = fopen($temp_file ,'r') or die("open file failure!");
    $total_line = 0;
    if($fp){
        /* 获取文件的一行内容,注意:需要php5才支持该函数; */
        while(stream_get_line($fp, 8192, "
    ")){
            $total_line++;
        }
        fclose($fp);
    }

    接下来好操作了吧?
    以下的程序主要是每次最大入库1000条,余数不足1000的就入余数。
    入库10W条数据时间也才几秒,所以说性能是大大滴的好的。
    define('EACH_NUM', 1000);/* 每次入库的条数 */
    if(!$total_line) die('no record!');
    $logs = mod('logs_error');
    $temp = array();
    $num = ceil($total_line/EACH_NUM);
    $mod = fmod($total_line,EACH_NUM);
    for($i=0;$i<$num;$i++){
        if(($i+1) == $num && $mod){
            $temp = $logs->getFileLines($temp_file, $i*EACH_NUM+1, $mod);
            $insert_num += $mod;
        }else{
            $temp = $logs->getFileLines($temp_file, $i*EACH_NUM+1, ($i+1)*EACH_NUM);
            $insert_num += EACH_NUM;
        }
        /* 入库 */
        $logs->insert($temp);
    }
    @unlink($temp_file);
    echo "Insert Record:{$insert_num} 
    Success";
    exit();

    如果你还有更好的操作文件的方法,或者是更好的入库的方法,可以联系我,我们交流下。
    来自:http://www.tuicool.com/articles/yQn2q2
     
     
    方法二:进行系统调用
    $file='xxx.file';
    list($size, $file) = explode(" ", system("wc -l $file"));
    //$size即文件的行数
     
     
  • 相关阅读:
    linux基本知识2
    Notification发送通知
    CSDN管理员看过来
    linux 中安装JDK
    断开网线黑客也能盗走你的数据
    1.6.2 多表插入
    【笨木头Lua专栏】基础补充07:协同程序初探
    猫猫学iOS 之微博项目实战(2)微博主框架-自己定义导航控制器NavigationController
    mysql innodb插入意向锁
    MongoDB实战指南(七):MongoDB复制集之复制集工作机制
  • 原文地址:https://www.cnblogs.com/Alight/p/4403328.html
Copyright © 2011-2022 走看看