在做项目时,需要从excel中读取数据插入数据表,测试的excel表格大概有600条数据左右,结果在插入数据时报错,如下
Fatal error: Allowed memory size of 134217728 bytes exhausted (tried to allocate 2611816 bytes)
原来是php.ini中的内存分配的问题,默认php代码能够申请到的最大内存字节数就是134217728 bytes,
如果代码执行的时候再需要更多的内存,就会报错了,于是就将php.ini文件中的配置改了一下:
memory_limit = 128M;将128M改成了256M
但是之后一想,一次请求的内存空间就要超过128M,那不管你以后将memory_limit设置成多大,以后肯定有出问题的时候。
起初的办法是在变量赋值后,却从来没有 unset ($var) 过。导致了内存占用越来越多,所以以后一个变量不再使用之后,一定要记得unset掉它。
测试时还是没有用,将 memory_limit = 200M时,测试后可以插入成功,那这肯定是代码的问题!
发现其中有两个foreach插入数据到两个表,每次循环插入一个表大概要执行5次,总共是600条数据,就要执行插入6000多次,这应该是导致内存不足报错的原因所在,下面是我的解决办法:利用 mysql 的 INSERT INTO 一次插入多条数据 ,格式如下:
INSERT INTO store_manufacturer (store_id, manufacturer_id ) values(1,3), (1,4), (1,5), (1,7), (1,9), (1,19), (1,20);
设置 memory_limit = 80M, 数据插入成功,没有报错,这样就减少了内存。
当然还有更多好的办法,还等待小伙伴一起探索!
转载时请注明出处及相应链接,本文永久地址:https://blog.yayuanzi.com/12852.html
微信打赏
支付宝打赏
感谢您对作者Bruin的打赏,我们会更加努力! 如果您想成为作者,请点我