国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > PHP > 正文

PHP利用fseek函數操作大文件

2020-03-22 18:03:50
字體:
來源:轉載
供稿:網友
  • 最近又遇到一個難緾的客戶,明明在網站后臺已經給他們做了一個積分導入模塊,他們嫌手工導入麻煩,非要做個自動化的,而且要兩套方案、

    方案1:他們開放一個內部數據庫,由我們讀取數據并寫到新數據庫里。他們領導說不安全,但是還是讓做,作為備用方案。

    方案2:他們將數據定時導出成TXT文本格式,放在一個指定的路徑,我們定時讀取它并解析。由于數據量很大,至少8萬條數據,目前導入的TXT樣本文件達25M,之后的數據會更多,我怕file或file_get_contents函數會吃不消。

    在網上找了一下,發現如下方法很是管用。

    fseek函數不需要把文件全部裝入內存,而是直接通過指針來操作,所以效率很高。代碼:

    $fp = fopen($file, "r");$line = 10;$pos = -2;$t = " ";$data = "";while ($line > 0) {    while ($t != "/n") {        fseek($fp, $pos, SEEK_END);        $t = fgetc($fp);        $pos --;    }    $t = " ";    $data .= fgets($fp);    $line --;}fclose ($fp);echo $data

    www.it165.net
    再提升一點,按塊讀取,然后計算塊內的/n標記來算到了多少行。

    $fp = fopen($file, "r");$num = 10;$chunk = 4096;$fs = sprintf("%u", filesize($file));$max = (intval($fs) == PHP_INT_MAX) ? PHP_INT_MAX : filesize($file);for ($len = 0; $len < $max; $len += $chunk) {$seekSize = ($max - $len > $chunk) ? $chunk : $max - $len;    fseek($fp, ($len + $seekSize) * -1, SEEK_END);    $readData = fread($fp, $seekSize) . $readData;     if (substr_count($readData, "/n") &gt;= $num + 1) {        preg_match("!(.*?/n){".($num)."}$!", $readData, $match);        $data = $match[0];        break;    }}fclose($fp);//echo $data;// code to process file contents

    有了這個函數,以后用PHP處理大文件就方便了。

    PS:那家客戶公司的領導真是有夠龜毛,一個導入功能居然要做三個方案!選定一個不就夠了,非要做那么多,你當買菜呀!

    PHP編程

    鄭重聲明:本文版權歸原作者所有,轉載文章僅為傳播更多信息之目的,如作者信息標記有誤,請第一時間聯系我們修改或刪除,多謝。

  • 發表評論 共有條評論
    用戶名: 密碼:
    驗證碼: 匿名發表
    主站蜘蛛池模板: 新化县| 蕲春县| 灵武市| 文昌市| 天等县| 凤阳县| 确山县| 开江县| 临城县| 唐河县| 辉县市| 文登市| 夏津县| 绥阳县| 中方县| 宜良县| 武定县| 清镇市| 麻江县| 儋州市| 如皋市| 布尔津县| 香港| 额尔古纳市| 禹城市| 嵩明县| 河池市| 赤城县| 江西省| 岳阳市| 天等县| 平阴县| 乐平市| 新平| 余庆县| 潜山县| 镇坪县| 阜阳市| 铜鼓县| 巴彦县| 内黄县|