PHP如何讀取大excel檔案資料的方法

來源:互聯網
上載者:User
這篇文章主要介紹了關於PHP如何讀取大excel檔案資料的方法,有著一定的參考價值,現在分享給大家,有需要的朋友可以參考一下

情境和痛點

說明

今天因為一個老同學找我,說自己公司的物流業務都是現在用excel處理,按月因為資料量大,一個excel差不多有百萬資料,檔案有接近100M,開啟和搜尋就相當的慢

聯想到情境:要匯入資料,可能excel資料量很大,這裡利用常用的一些方法比如phpexcel會常有時間和記憶體限制問題

下面我們就利用一個利用流處理的類庫SpreadsheetReader來做大excel的讀取

編寫過程

說明

關鍵具體在代碼裡注釋

代碼

<?php/** * Created by PhpStorm. * User: qkl * Date: 2018/7/11 * Time: 15:14 */set_time_limit(0);   // 設定指令碼最大執行時間 為0 永不到期//ini_set('memory_limit','200M');    // 臨時設定最大記憶體佔用function convert($size){    $unit = array('b', 'kb', 'mb', 'gb', 'tb', 'pb');    return @round($size / pow(1024, ($i = floor(log($size, 1024)))), 2) . ' ' . $unit[$i];}require '../vendor/autoload.php';$start = memory_get_usage();echo convert($start) . PHP_EOL;//$inputFileName = './11111111.xlsx';$inputFileName = './example1.xlsx';// If you need to parse XLS files, include php-excel-reader$startTime = microtime(true);$Reader = new SpreadsheetReader($inputFileName);//擷取當前檔案所有的工作表$sheets = $Reader->Sheets();if (!$sheets) {    die("沒有工作表");}//改變當前處理的工作表$Reader->ChangeSheet(0);//列印當前所在工作表的當前所在行資料var_dump($Reader->current());//因為reader類整合了Iter所以可以用迭代方式處理//這裡提醒 如果檔案超大,這邊的處理速度會過慢,不過不會引發記憶體效能問題//$i = 0;//foreach ($Reader as $Row)//{//    if ($i>=3) {//        break;//    }////    echo $i . PHP_EOL;//    print_r($Row);////    $i++;//}$endTime = microtime(true);$memoryUse = memory_get_usage();echo "記憶體佔用:" . convert($memoryUse) . "; 用時:" . ($endTime - $startTime) . PHP_EOL;

結果

測試說明

上面讀取的example1.xlsx檔案有100M左右,讀寫過慢,測試只開了讀取當前預設工作表的當前所在行資料
因資料敏感,已做屏蔽

日誌記錄記憶體使用量率

147.77 kbarray (size=50)  0 => string 'xxxxxxxxxxxxxx' (length=25)  1 => string 'xxxxxxxxxxxxxx' (length=15)  2 => string 'xxxxxxxxxxxxxx' (length=18)  3 => string 'xxxxxxxxxxxxxx' (length=12)  4 => string 'xxxxxxxxxxxxxx' (length=12)  5 => string 'xxxxxxxxxxxxxx' (length=12)  6 => string 'xxxxxxxxxxxxxx' (length=24)  7 => string 'xxxxxxxxxxxxxx' (length=12)  8 => string 'xxxxxxxxxxxxxx' (length=27)  9 => string 'xxxxxxxxxxxxxx' (length=12)  10 => string 'xxxxxxxxxxxxxx' (length=15)  11 => string 'xxxxxxxxxxxxxx' (length=28)  12 => string 'xxxxxxxxxxxxxx' (length=9)  13 => string 'xxxxxxxxxxxxxx' (length=12)  14 => string 'xxxxxxxxxxxxxx' (length=9)  15 => string 'xxxxxxxxxxxxxx' (length=6)  16 => string 'xxxxxxxxxxxxxx' (length=9)  17 => string 'xxxxxxxxxxxxxx' (length=3)  18 => string 'xxxxxxxxxxxxxx' (length=6)  19 => string 'xxxxxxxxxxxxxx' (length=3)  20 => string 'xxxxxxxxxxxxxx' (length=15)  21 => string 'xxxxxxxxxxxxxx' (length=15)  22 => string 'xxxxxxxxxxxxxx' (length=19)  23 => string 'xxxxxxxxxxxxxx' (length=13)  24 => string 'xxxxxxxxxxxxxx' (length=19)  25 => string 'xxxxxxxxxxxxxx' (length=12)  26 => string 'xxxxxxxxxxxxxx' (length=12)  27 => string 'xxxxxxxxxxxxxx' (length=12)  28 => string 'xxxxxxxxxxxxxx' (length=6)  29 => string 'xxxxxxxxxxxxxx' (length=12)  30 => string 'xxxxxxxxxxxxxx' (length=6)  31 => string 'xxxxxxxxxxxxxx' (length=15)  32 => string 'xxxxxxxxxxxxxx' (length=24)  33 => string 'xxxxxxxxxxxxxx' (length=18)  34 => string 'xxxxxxxxxxxxxx' (length=18)  35 => string 'xxxxxxxxxxxxxx' (length=24)  36 => string 'xxxxxxxxxxxxxx' (length=12)  37 => string 'xxxxxxxxxxxxxx' (length=18)  38 => string 'xxxxxxxxxxxxxx' (length=21)  39 => string 'xxxxxxxxxxxxxx' (length=9)  40 => string 'xxxxxxxxxxxxxx' (length=9)  41 => string 'xxxxxxxxxxxxxx' (length=18)  42 => string 'xxxxxxxxxxxxxx' (length=21)  43 => string 'xxxxxxxxxxxxxx' (length=15)  44 => string 'xxxxxxxxxxxxxx' (length=12)  45 => string 'xxxxxxxxxxxxxx' (length=6)  46 => string 'xxxxxxxxxxxxxx' (length=12)  47 => string 'xxxxxxxxxxxxxx' (length=22)  48 => string 'xxxxxxxxxxxxxx' (length=22)  49 => string '' (length=0)記憶體佔用:207.55 kb; 用時:9.5835480690002

以上就是本文的全部內容,希望對大家的學習有所協助,更多相關內容請關注topic.alibabacloud.com!

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.