我有一些XML文件需要在Html中"转换"并显示在屏幕上。
我开发了一个简单的脚本,使用DOMDocument
和XSLTProcessor
,它几乎一直有效。
问题是,有时它会出现这种错误,而生成的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(。
小心这样做的潜在后果:你可能会遇到内存不足的问题。