Как включить функции XSLT в PHP 5?

Я хочу распечатать 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 contentsn<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); 

    ?>

спасибо заранее!

3 ответов


вы должны скомпилировать PHP С поддержкой этого и убедитесь, что у вас есть все необходимые зависимости. Пожалуйста, смотрите соответствующие главы в руководство PHP для XSLT.

главы требования

для этого расширения требуется расширение libxml PHP. Это означает, что передача --enable-libxml также требуется, хотя это неявно выполняется, поскольку libxml включен по умолчанию. Это расширение использует Sablotron и expat, которые можно найти в " http://freshmeat.net/projects/sablotron/. Предоставляются двоичные файлы,а также источник. Включите с помощью опции --with-xslt с PHP 4.

главы установка

на Unix, запустить configure с опцией --enable-на XSLT-с-с 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.Итак, " к вашему php.ini-файл и перезапустите сервер apache2.

Это сработало для меня на Ubuntu 11.10. Вы можете ввести "sudo apt-get install php5-xsl" в командную строку для установки php5-xml.


Ну, это очень просто, но на php.net его можно было бы объяснить более подробно.

Я использую один контейнер docker, содержащий базу ubuntu и использующий php-fpm.

шаги по установке этого расширения в моем контексте были:

первое расширение поиска xsl в репозитории linux apt - поиск кэша xsl

Я закончил тем, что нашел php5-xsl, поэтому это была только установка apt-get install php5-xsl

что процесс установки установки конфигурация уже добавлена, если не происходит, просто сделайте сами ВИМ файл /etc/php5 с/модов-доступно и xsl.ini

вставить этот контент: расширение=xsl.так что

(очевидно, что пути соответствуют вашим настройкам конфигурации php, но мой пример-конфигурация по умолчанию)

перезапустите php fpm и готово!