分配内存故障

时间:2017-12-26 17:17:13

标签: php

对我来说,处理一个通常占用1.4 Mb的XML字符串变量。

何时执行脚本的那部分:

echo memory_get_usage()." - ";
$aux_array['T3']=substr($xml, $array_min["T3"], strpos($xml, "</second>", $contador)-$array_min["T3"]);
print_r(memory_get_usage());

显示

5059720 - 5059896

但那是什么时候:

echo memory_get_usage()." - ";
$aux_array['US']=substr($xml, $array_min["US"], strpos($xml, "</second>", $contador)-$array_min["US"]);
print_r(memory_get_usage());

显示是

5059896 - 6417152

对我而言,两个订单都相同,但memory_get_usage()并不是谎言。

确切的输出是:

  

PHP致命错误:允许的内存大小为268435456字节   (尝试分配1305035字节)in   第138行/var/www/html/devel/soap/index.php

因为while句子会多次分配这个大小。

你能弄明白问题是什么吗?

1 个答案:

答案 0 :(得分:0)

问题是你在PHP脚本中持有大约268MB的数据,即使你的输入XML文件只有1.4MB大。清除/删除在PHP脚本运行时不再需要清除内存的变量。或者更改使用XML文件的方式。您可能希望使用遍历XML节点的XMLReader而不是一次性加载整个XML文件。