使用xml_parse时我遇到了一个奇怪的错误。我的脚本通过xml_parse函数在XML文件的最后一行返回“No memory”错误。只有当文件大小超过10Mb时才会发生这种情况。少可以接受。但我对PHP脚本有3Gb可用,总内存为32Gb。
这个脚本曾经在另一台服务器上工作(有2Gb用于PHP和16Gb)并且它可以处理更大的文件。但它是FreeBSD,现在它是在CentOS 6.4下。
可能有人有同样的情况吗?
答案 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是最后一个版本。降级后一切都还可以。