搜尋

首頁  >  問答  >  主體

在Laravel匯入Excel檔案,資料量太大,伺服器經常500怎麼辦?

使用的Laravel excel拓展,在不修改伺服器配置的前提下,如何快速導入1萬多條excel資料並且不報500錯誤,謝謝

我想大声告诉你我想大声告诉你2749 天前750

全部回覆(3)我來回復

  • PHPz

    PHPz2017-05-16 16:50:23

    這種情況一般是記憶體佔用超過php最大允許的配置或執行時間太長而逾時。如果直接使用Laravel excel的擴展,基於web上傳方式導入的話肯定會超時同時也肯定超過內存大小限制了的。

    解決辦法是使用Laravel的定時任務或任務佇列。

    • 定時任務

      上传文件后,定时任务去检查是否有新上传的文件,如果有就执行导入处理。
      
    • 任務隊列

      上传文件后,发布一个异步事件,由任务listener去异步处理excel内容的导入。
      

      最後導入完成後再將導入結果寫入資料庫或其它儲存方式,這樣非同步的對資料進行導入就不會因為記憶體或超時而報錯了。

    回覆
    0
  • 曾经蜡笔没有小新

    曾经蜡笔没有小新2017-05-16 16:50:23

    很正常。常遇到這個。所以我開發了一個擴充功能。
    https://git.oschina.net/xavie...
    https://github.com/xavieryang...

    PHP導入xls問題很嚴重,xlsx由於是壓縮包加xml,比xls好。 xls是二進位文件,必須全部加載才可以解析,而且解析比較複雜,目前比較流行的PHPEXCEL處理xls速度非常慢,導入xls的時候往往都死在了解析。

    回覆
    0
  • 巴扎黑

    巴扎黑2017-05-16 16:50:23

    不用一次吧1W條讀入內存 一條一條讀,一條一條存

    function getRows($file)
    {
        $handle = fopen($file, 'rb');
        if (!$handle) {
            throw new Exception();
        }
        while (!feof($handle)) {
            yield fgetcsv($handle);
        }
        fclose($handle);
    }
    
    
    foreach (getRows('data.csv') as $k) {
    
    }

    回覆
    0
  • 取消回覆