XSLTProcessor :: transformToUri (): Ошибка выделения памяти: достигнут произвольный предел MAX_URI_LENGTH - PullRequest
0 голосов
/ 26 марта 2020

У меня есть 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() тоже не показывает результатов.

...