suchen

Heim  >  Fragen und Antworten  >  Hauptteil

Beim Importieren von Excel-Dateien in Laravel ist die Datenmenge zu groß und der Server erhält oft 500 Anfragen. Was soll ich tun?

Mit der Laravel-Excel-Erweiterung können Sie schnell mehr als 10.000 Excel-Daten importieren, ohne die Serverkonfiguration zu ändern, ohne einen 500-Fehler zu melden. Vielen Dank

我想大声告诉你我想大声告诉你2818 Tage vor826

Antworte allen(3)Ich werde antworten

  • PHPz

    PHPz2017-05-16 16:50:23

    这种情况一般是内存占用超过php最大允许的配置或者执行时间太长而超时。如果直接使用Laravel excel扩展,基于web上传的方式导入的话肯定会超时同时也肯定超过内存大小限制了的。

    解决办法是使用Laravel的定时任务或者任务队列。

    • 定时任务

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

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

      最后导入完成后再将导入结果写入数据库或者其它存储方式,这样异步的对数据进行导入就不会因为内存或者超时而报错了。

    Antwort
    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的时候往往都死在了解析。

    Antwort
    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) {
    
    }

    Antwort
    0
  • StornierenAntwort