XSLTProcessor::transformToUri():内存分配失败:达到任意MAX_URI_LENGTH限制



我有一些XML文件需要在Html中"转换"并显示在屏幕上。

我开发了一个简单的脚本,使用DOMDocumentXSLTProcessor,它几乎一直有效。

问题是,有时它会出现这种错误,而生成的html只是完整内容的一部分:

XSLTProcessor::transformToUri(): Memory allocation failed : reaching arbitrary MAX_URI_LENGTH limit in /var/www/test/index.php on line 14

这是我的脚本的工作副本,它在相同的文件中出现相同的错误。

<?php
$xslPath = 'test.xsl';
$xmlString = file_get_contents('test.xml');
$xml = new DOMDocument;
$xml->loadXML($xmlString);
$xsl = new DOMDocument;
$xsl->load($xslPath);
$proc = new XSLTProcessor;
$proc->importStyleSheet($xsl);
$proc->transformToURI($xml, 'php://output');

我已经尝试将输出保存到一个文件中,但仍然有同样的错误,所以php://output应该不是问题。我该如何解决这个问题?

编辑:问题似乎出在以下代码中。如果事实上,如果我去掉以下几行,我就看不到这个问题了。我希望这能有所帮助:

<a name="link" href="data:{$mimeType}/{$format};base64,{normalize-space(Attachment)}" download="{$attachmentName}">
<xsl:value-of select="attachmentName" />
</a>

附件本身是一个base64 pdf文件(在本例中是一个约1mb的字符串,但可能更多(

EDIT 2:如果我尝试使用命令行xsltproc命令生成html,就会发生这种情况:

xsltproc --stringparam target cora_cmd test.xsl test.xml > test.html
URI error : Memory allocation failed : reaching arbitrary MAX_URI_LENGTH limit
URI error : Memory allocation failed : escaping URI value

第3版:我尝试用transformToXML替换transformToURI,但没有结果。libxml_get_errors()也没有显示任何结果。

您需要增加PHP在脚本中允许使用的内存量。首先打开php.ini文件。如果您不知道它的位置,请在终端中运行php --ini,或者查找标题为Loaded Configuration File的行并进行编辑(您可能需要sudo访问(。

找到变量memory_limit并将其更改为更大的值。(我把我的128M改成512M(。

小心这样做的潜在后果:你可能会遇到内存不足的问题。

相关内容

  • 没有找到相关文章

最新更新