Я хочу распечатать xml-файл в виде вложенного списка HTML с помощью xslt, и, насколько я знаю, код верен, однако я получаю эту ошибку
Неустранимая ошибка: вызов неопределенной функции xslt_create ()
Я полагаю, что функции xslt не были включены. Как включить эти функции в PHP? Есть ли файл php, который мне нужно включить (например, как работают библиотеки Javascript), или это что-то более сложное? Я принимаю участие в MediaTemple.
Вот код php, который я использую:
<?php // Allocate a new XSLT processor $xh = xslt_create(); // Process the document, returning the result into the $result variable $result = xslt_process($xh, 'armstrong.xml', 'familyToNestedList.xsl'); if ($result) { print "SUCCESS, sample.xml was transformed by sample.xsl into the \$result"; print " variable, the \$result variable has the following contents\n<br>\n"; print "<pre>\n"; print $result; print "</pre>\n"; } else { print "Sorry, sample.xml could not be transformed by sample.xsl into"; print " the \$result variable the reason is that " . xslt_error($xh) . print " and the error code is " . xslt_errno($xh); } xslt_free($xh); ?>
Заранее спасибо!
Вы должны скомпилировать PHP с его поддержкой и обязательно иметь все необходимые зависимости. См. Соответствующие главы в Руководстве по PHP для XSLT .
Из раздела Требования
Для этого расширения требуется расширение libxml PHP. Это означает, что также требуется передать inenable-libxml, хотя это неявно выполняется, потому что libxml включен по умолчанию. Это расширение использует Sablotron и expat, которые можно найти на странице http://freshmeat.net/projects/sablotron/ . Также предоставляются бинарники, а также источник. Включить с помощью параметра –with-xslt с PHP 4.
Из раздела Установка
В Unix запустите configure с параметрами –enable-xslt –with-xslt-sablot. Библиотека Sablotron должна быть установлена где-то ваш компилятор может ее найти. Убедитесь, что у вас есть те же библиотеки, которые связаны с библиотекой Sablotron, как те, которые связаны с PHP. Параметры конфигурации: –with-expat-dir = DIR –with-iconv-dir = DIR, чтобы помочь вам указать их. При запросе поддержки всегда указывайте эти директивы и есть ли где-то другие версии этих библиотек, установленные в вашей системе. Естественно, укажите все номера версий.
Рекомендуемым расширением для использования XSL-преобразований с PHP5 является XSL . Если все, что вам нужно сделать, это преобразовать два документа, как показано в вашем примере, рассмотрим этот пример из руководства PHP:
$xml = new DOMDocument; $xml->load('collection.xml'); $xsl = new DOMDocument; $xsl->load('collection.xsl'); // Configure the transformer $proc = new XSLTProcessor; $proc->importStyleSheet($xsl); // attach the xsl rules echo $proc->transformToXML($xml);
Метод transformToXML
возвращает преобразованный документ или FALSE
, поэтому вы можете сохранить if / else из своего кода. В любом случае для обновления кода должно быть тривиально.
В зависимости от вашего дистрибутива Linux вы можете просто установить модуль php5-xsl, добавить строку «extension = php_xsl.so» в файл php.ini и перезапустить сервер apache2.
Это сработало для меня на Ubuntu 11.10. Вы можете ввести «sudo apt-get install php5-xsl» в командную строку для установки php5-xml.
Ну, очень просто, но на php.net его можно объяснить более четко.
Я использую один контейнер докеров, содержащий базу ubuntu и использую php-fpm.
Шаги по установке этого расширения в моем контексте:
Первый поиск расширения xsl в репозитории linux apt-cache search xsl
Я закончил поиск php5-xsl, поэтому он установил только install apt-get install php5-xsl
что процесс установки настроек конфигурации уже добавлен, если этого не произойдет, просто сделайте сам vim /etc/php5/mods-available/xsl.ini
вставьте этот контент: extension = xsl.so
(очевидно, что пути соответствуют вашим настройкам конфигурации php, но мой пример – это конфигурация по умолчанию)
Перезапустите php fpm и закончите!