xml_parse没有内存错误PHP

时间:2013-10-03 06:50:56

标签: php memory xml-parsing centos

使用xml_parse时我遇到了一个奇怪的错误。我的脚本通过xml_parse函数在XML文件的最后一行返回“No memory”错误。只有当文件大小超过10Mb时才会发生这种情况。少可以接受。但我对PHP脚本有3Gb可用,总内存为32Gb。

这个脚本曾经在另一台服务器上工作(有2Gb用于PHP和16Gb)并且它可以处理更大的文件。但它是FreeBSD,现在它是在CentOS 6.4下。

可能有人有同样的情况吗?

2 个答案:

答案 0 :(得分:2)

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读取你的文件,那就没问题了:

$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));
    }
}

答案 1 :(得分:0)

通过降级libxml解决了问题。由于我们的框架 - Symfony 1.4,我们需要使用PHP 5.2.17而libxml是最后一个版本。降级后一切都还可以。