У меня есть 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 (в данном случае это строка ~ 1 МБ, но это может быть даже больше)
РЕДАКТИРОВАТЬ 2: Вот что происходит, если я пытаюсь сгенерировать html с помощью командной строки xsltproc
команда:
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: Я попытался заменить transformToURI
с transformToXML
, без результатов. libxml_get_errors()
тоже не показывает результатов.