但栏目超过一定数目时候,批量将栏目数据导入配置文件时,在设置了memory_limit 的环境会出现错误:
Fatal error: Allowed memory size of 41943040 bytes exhausted (tried to allocate 44 bytes)
147个栏目,memory_limit =40M 都不够用(才导入70个栏目就报错了)!
检查了很久,发现错误可能存在于config组件:
Config之前占用内存。。2897264
Config后占用内存。。2897264
parseConfig后占用内存。。3667464 =》这里一下就消耗了近1M的内存,50个栏目,就要50M内存
toString后占用内存。。3667464
发现了问题,如何修改呢? 我需要释放内存,只能从程序动手。
var_dump了parseConfig,发现是一个超级大的obj,
查看config源代码后,决定暂时扩展一下toString函数,将 $obj 从内存中释放
unset() 发现没作用。
$obj = ''; 或 $obj = NULL; 倒是很有效。
测试效果如下:
Config之前内存。。2897264
Config内存。。2897264
parseConfig内存。。3667464
toString内存。。2969008
Config之前内存。。2898160
Config内存。。2898160
parseConfig内存。。3668360
toString内存。。2970240
Config之前内存。。2897112
Config内存。。2897112
parseConfig内存。。3667312
toString内存。。2968352
达到了预期目的,以后有精力再花时间好好研究一下。
估计是config作者的一个疏忽,毕竟像我们这样使用它的情况很少。