对我来说,处理一个通常占用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句子会多次分配这个大小。
你能弄明白问题是什么吗?
答案 0 :(得分:0)
问题是你在PHP脚本中持有大约268MB的数据,即使你的输入XML文件只有1.4MB大。清除/删除在PHP脚本运行时不再需要清除内存的变量。或者更改使用XML文件的方式。您可能希望使用遍历XML节点的XMLReader而不是一次性加载整个XML文件。