xml_parse 无内存错误 PHP

web*_*ear 1 php memory centos xml-parsing

我在使用 xml_parse 时遇到了一个奇怪的错误。我的脚本通过 xml_parse 函数在 XML 文件的最后一行返回“无内存”错误。这仅在文件大小大于 10Mb 时发生。少是可以接受的。但是我有 3Gb 可用于 PHP 脚本,总内存为 32Gb。

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

可能有人有同样的情况?

小智 5

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));
}
Run Code Online (Sandbox Code Playgroud)

但是,如果您以 5 MB 的大小读取文件,则可以:

$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));
    }
}
Run Code Online (Sandbox Code Playgroud)