LINUX.ORG.RU

PHP, libxml_set_external_entity_loader + xsl:include

 , ,


0

1

Не могу понять че за фигня. В XSL шаблон подключаю несколько файлов:


<!-- file:/www/path/to/template.xsl -->

<xsl:stylesheet ...>

	<!-- file:/www/path/to/fail.xsl -->
	<xsl:include href="fail.xsl" />

</xsl:stylesheet> 

Загружаю, предварительно установив: 

libxml_set_external_entity_loader (function (string $public_id, string $system_id, array $context) {

	print $system_id;
   
});

$DOM->load ('/www/path/to/template.xsl');

выводит:

/www/path/to/template.xsl [Верно]
/www/path/fail.xsl [WTF?]

1. Почему в $system_id колбэка не ложится просто «fail.xsl»?
2. Почему определяется путь на уровень выше необходимого?
3. Как на это можно повлиять?


Предположу, что getcwd() выдаст /www/path. То бишь идёт разрешение полного пути включаемого ресурса относительно текущего рабочего каталога.

sanwashere ★★
()
Последнее исправление: sanwashere (всего исправлений: 1)
Ответ на: комментарий от sanwashere

getcwd() выдает путь к скрипту который вызвал $DOM->load(), и в колбэке он такой же (не меняется). Как я понял весь прикол в том, что определение путей к файлам происходит где то под капотом libxml. Самое смешное что если убрать внешний загрузчик то все работает без проблем.

ez7
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.