2010-12-15 2 views
8

Я хотел напечатать XML-файл, как в гнездовой список HTML с использованием XSLT, и насколько я знаю, что код правильный, однако я получаю эту ошибкуКак включить функции XSLT в PHP 5?

Fatal error: Call to undefined function xslt_create()

Что я полагаю, означает, Функции xslt havn't не включены. Как включить эти функции в 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); 

    ?> 

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

+0

http://www.php.net/manual/en/xslt.installation.php – DampeS8N 2010-12-15 14:43:55

ответ

7

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

Из главы Requirements

This extension requires the libxml PHP extension. This means that passing in --enable-libxml is also required, although this is implicitly accomplished because libxml is enabled by default. This extension uses Sablotron and expat, which can both be found at » http://freshmeat.net/projects/sablotron/ . Binaries are provided as well as source. Enable by using the --with-xslt option with PHP 4.

Из главы Installation

On Unix, run configure with the --enable-xslt --with-xslt-sablot options. The Sablotron library should be installed somewhere your compiler can find it. Make sure you have the same libraries linked to the Sablotron library as those, which are linked with PHP. The configuration options: --with-expat-dir=DIR --with-iconv-dir=DIR are there to help you specify them. When asking for support, always mention these directives, and whether there are other versions of those libraries installed on your system somewhere. Naturally, provide all the version numbers.

recommended extension for using XSL transformations with PHP5 is 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, так что вы можете сохранить, если/иначе из вашего кода. В любом случае для обновления кода должно быть тривиально.

+0

Итак ... OP необходимо будет перекомпилировать PHP? – sholsinger 2010-12-15 14:51:08

+0

@sholsinger Да, если PHP не был настроен, как указано выше, и расширение просто отключено в php.ini. Но XSLT - это PECL с PHP5, поэтому маловероятно, что это так. – Gordon 2010-12-15 14:54:44

16

В зависимости от вашего дистрибутива Linux вы можете просто установить модуль php5-xsl, добавить строку «extension = php_xsl.so» в файл php.ini и перезагрузить сервер apache2.

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

2

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

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

шаги, чтобы установить это расширение в моем контексте были:

Первое расширение поиска XSL на репозитории Linux APT-кэша поиска XSL

Я в конечном итоге найти php5-XSL, так что это было только установить APT-получить установку php5-XSL

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

Вставьте этот текст: extension = xsl.так

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

Restart вы PHP FPM и сделано!