使用的Laravel excel拓展,在不修改服务器配置的前提下,如何快速导入1万多条excel数据并且不报500错误,谢谢
使用的Laravel excel拓展,在不修改服务器配置的前提下,如何快速导入1万多条excel数据并且不报500错误,谢谢
很正常。经常遇到这个。所以我开发了一个扩展。
https://git.oschina.net/xavie...
https://github.com/xavieryang...
PHP导入xls问题很严重,xlsx由于是压缩包加xml,比xls要很好。xls是二进制文件,必须全部加载才可以解析,而且解析比较复杂,目前比较流行的PHPEXCEL处理xls速度非常慢,导入xls的时候往往都死在了解析。
不用一次吧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) {
}
4 回答1.7k 阅读
3 回答639 阅读✓ 已解决
698 阅读
720 阅读
这种情况一般是内存占用超过php最大允许的配置或者执行时间太长而超时。如果直接使用Laravel excel扩展,基于web上传的方式导入的话肯定会超时同时也肯定超过内存大小限制了的。
解决办法是使用Laravel的定时任务或者任务队列。
定时任务
任务队列
最后导入完成后再将导入结果写入数据库或者其它存储方式,这样异步的对数据进行导入就不会因为内存或者超时而报错了。