鍍金池/ 問答/PHP  網(wǎng)絡(luò)安全  Office/ phpexcel讀文件的時候cpu99%

phpexcel讀文件的時候cpu99%


 /**
     * 導(dǎo)入Excels
     *
     * @param string $file
     * @param array  $sheet_names
     *
     * @return array|bool
     * @throws \PHPExcel_Exception
     * @throws \PHPExcel_Reader_Exception
     */
    public static function importExcel($file, $sheet_names)
    {
        foreach ($sheet_names as $sheet_name) {
            $rowSize = 200;
            $startRow = 1;//從第二行開始讀取
            $endRow = $rowSize;
            $data = [];
            while (true) {
                $excel_orders = self::readFromExcel($file, $startRow, $endRow, $sheet_name);
                if (empty($excel_orders)) {
                    break;
                }
                $data = array_merge($data, $excel_orders);
                $startRow = $endRow + 1;
                $endRow = $endRow + $rowSize;
            }
            $result[$sheet_name] = $data;
        }

        return $result;
    }



 /**
     * 讀取excel轉(zhuǎn)換成數(shù)組
     *
     * @param string $excelFile  文件路徑
     * @param int    $startRow   開始讀取的行數(shù)
     * @param int    $endRow     結(jié)束讀取的行數(shù)
     * @param string $sheet_name sheet名稱
     *
     * @return array
     * @throws \PHPExcel_Exception
     * @throws \PHPExcel_Reader_Exception
     */
    private static function readFromExcel($excelFile, $startRow = 1, $endRow = 100, $sheet_name)
    {
        $excelType = PHPExcel_IOFactory::identify($excelFile);
        $excelReader = PHPExcel_IOFactory::createReader($excelType);
        if (strtoupper($excelType) == 'CSV') {
            $excelReader->setInputEncoding('GBK');
        }
        if ($startRow && $endRow) {
            $excelFilter = new PHPExcelReadFilter();
            $excelFilter->startRow = $startRow;
            $excelFilter->endRow = $endRow;
            $excelReader->setReadFilter($excelFilter);
        }
        $php_excel = $excelReader->load($excelFile);
        $activeSheet = $php_excel->getSheetByName($sheet_name);
        if ( !$activeSheet) {
            return [];
        }
        $highestColumn = $activeSheet->getHighestColumn(); //最后列數(shù)所對應(yīng)的字母,例如第1行就是A
        $highestColumnIndex = PHPExcel_Cell::columnIndexFromString($highestColumn); //總列數(shù)
        $data = [];
        for ($row = $startRow; $row <= $endRow; $row++) {
            for ($col = 0; $col < $highestColumnIndex; $col++) {
                $data[$row][] = (string)$activeSheet->getCellByColumnAndRow($col, $row)->getFormattedValue();
            }
            if (implode($data[$row], '') == '') {
                unset($data[$row]);
            }
        }

        return $data;
    }
使用:
    $data = CommonHelper::importExcel($file, ['sheet', 'sheet1', 'sheet2', 'sheet3']);

clipboard.png

**在讀取的時候 cpu瞬間98 99%,excel文件并不是很大 2M左右 更小也是這樣,這是本機測試的,在服務(wù)器上也是一樣的效果,4核 16G的配置;
有什么其他寫法么?**

回答
編輯回答
怣痛

幫你搜了一下,這里有一些建議,你可以看看: https://stackoverflow.com/que...

2017年3月13日 07:25