繁体   English   中英

xml_parse没有内存错误PHP

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM