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)