[英]xml_parse No memory error PHP
使用xml_parse时出现一个奇怪的错误。 我的脚本通过xml_parse函数在XML文件的最后一行返回“ No memory”错误。 仅当文件大小大于10Mb时才会发生这种情况。 更少是可以接受的。 但是我有3Gb适用于PHP脚本,总内存为32Gb。
该脚本曾经在另一台服务器上工作时才起作用(PHP为2Gb,共16Gb),并且可以处理更大的文件。 但是它是FreeBSD,现在是在CentOS 6.4下。
可能有人情况相同吗?
在libxml“ LIBXML_PARSEHUGE”中有一个硬编码的限制。有关详细信息,请访问http://php.net/manual/en/libxml.constants.php 。
但是您不需要降级libxml。 只需更改您调用xml_parse的方式即可。
例如,对于超过10MB的文件,此方法不起作用:
$fileContent = file_get_contents("/tmp/myFile.xml");
if (!xml_parse($this->xmlParser, $fileContent, true))
{
$xmlErreurString = xml_error_string(xml_get_error_code($xmlParser));
}
但是,如果您通过5MB读取文件5,就可以了:
$xmlParser = xml_parser_create();
$fp = fopen("/tmp/myFile.xml", "r");
while($fileContent = fread($fp, 1024*1024*5))
{
if (!xml_parse($xmlParser, $fileContent, feof($fp)))
{
$xmlErreurString = xml_error_string(xml_get_error_code($xmlParser));
}
}
通过降级libxml解决了问题。 由于我们的框架-Symfony 1.4,我们需要使用PHP 5.2.17,而libxml是最新版本。 降级后,一切正常。
显然,对此有一个更好的答案,如此处概述的函数simplexml_load_string()上的XML_PARSE_HUGE
您需要设置常量LIBXML_PARSEHUGE来绕过限制:
$xmlDoc->loadXML( $xml , LIBXML_PARSEHUGE );
感谢@Vaclav Kohout提供此用法说明。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.