搜尋

首頁  >  問答  >  主體

mysql - PHPExcel匯入1萬個資料連線逾時

新手剛學PHP,目前開發需要滿足用phpexcel往資料庫插入1萬筆記錄(1筆記錄43列),每個資料插入前先查詢庫中是否存在,不存在則繼續插入,並更新原表置標誌,否則跳過該筆記錄。
現在的狀況是導入2000條資料要20多秒,導入1萬個資料就報500錯誤,導入失敗,查看存放上傳文件的目錄裡面也沒有該文件。 `$result=move_uploaded_file($_FILES'inputExcel',$uploadfile);

    if(!$result)
    {
        die('no file!');
    }
    
    $objReader = PHPExcel_IOFactory::createReader('CSV')
    ->setDelimiter(',')
    ->setInputEncoding('GBK')
    ->setEnclosure('"')
    ->setLineEnding("\r\n")
    ->setSheetIndex(0);
    $objPHPExcel = $objReader->load($uploadfile);        
    $sheet = $objPHPExcel->getSheet(0);        
    $highestRowNum = $sheet->getHighestRow();
    $highestColumn = $sheet->getHighestColumn();
    $highestColumnNum = PHPExcel_Cell::columnIndexFromString($highestColumn);
    echo $highestRowNum.'+'.$highest

這邊無法取得行和列數。程式碼裡面已結加了set_time_limit=0,記憶體也改成128M。求大神指點

世界只因有你世界只因有你2756 天前1024

全部回覆(4)我來回復

  • 伊谢尔伦

    伊谢尔伦2017-05-16 13:01:12

    應該是內存爆了。你可以用yield迭代限制每次插入的條數。其實就是協程啦。

    回覆
    0
  • 大家讲道理

    大家讲道理2017-05-16 13:01:12

    單次導入1萬個數據,很容易超時,對伺服器的負載也大,可以考慮把1W條數據拆分成多次導入,這種大數據的導入可以使用異步的方式來完成,不要讓用戶等待。還有可以換考慮使用協程。

    回覆
    0
  • 漂亮男人

    漂亮男人2017-05-16 13:01:12

    將上傳後的檔案名稱加入佇列 寫入腳本從佇列讀到檔案名稱之後開啟檔案匯入 腳本加入crontab定時任務或寫成服務

    回覆
    0
  • 为情所困

    为情所困2017-05-16 13:01:12

    既然是csv,那就沒必要使用PHPExcel了哈,這個開源庫,太耗內存了,之前我用的是這個庫,https://packagist.org/package...(似乎只支援PHP7), demo我就不寫了,自己去文件裡面找,導入幾十萬條都沒壓力,不謝哈。
    再介紹一個,https://packagist.org/package...,沒壓力哈,建議題主先去了解一下csv是什麼東東,我們甚至可以自己寫一個csv導入類,感覺最高效&輕量級。

    回覆
    0
  • 取消回覆