php - xml_parse 无内存错误 PHP

标签 php memory xml-parsing centos

我在使用 xml_parse 时遇到了一个奇怪的错误。我的脚本通过 xml_parse 函数在 XML 文件的最后一行返回“无内存”错误。仅当文件大小大于 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));
}

但是,如果您将文件 5 x 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));
    }
}

关于php - xml_parse 无内存错误 PHP,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19152613/

相关文章:

ios - 如何阻止我的 swift 应用程序崩溃

ruby-on-rails - 使用 Rails 中的 Nokogiri 加速 XML 到 MySQL

php - 如何在 PHP 中显示取决于用户输入的长查询的 MySQL 错误?

php - 消息 : SQLSTATE[HY093]: Invalid parameter number: parameter was not defined

c++ - 在 Win 7 64 位/3gb 开关(-GF LARGEADDRESSAWARE )下运行 32 位 Borland XE2 应用程序?

java - 静态变量的内存范围

java - 如何使用java从html页面获取数据?

python - 使用 Python 优化 XML 解析为 CSV

javascript - 使用 jquery、ajax 和 codeigniter 的链选择器动态下拉框

javascript - 为 html 表单 GET 方法添加附加文本