2010-12-15 31 views
8

Estoy queriendo imprimir un archivo XML como una lista anidada HTML usando XSLT, y por lo que sé que el código es correcto, sin embargo estoy recibiendo este error¿Cómo habilito las funciones XSLT en PHP 5?

Fatal error: Call to undefined function xslt_create()

que supongo que significa que el Las funciones xslt no han sido habilitadas. ¿Cómo habilito estas funciones dentro de PHP? ¿Hay algún archivo php que deba incluir (como la forma en que funcionan las bibliotecas Javascript) o es algo más complicado? Estoy alojado en MediaTemple.

Aquí está el código php que estoy usando:

 <?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); 

    ?> 

Gracias de antemano!

+0

http://www.php.net/manual/en/xslt.installation.php – DampeS8N

Respuesta

7

Tiene que compile PHP con el soporte para eso y asegúrese de tener todas las dependencias requeridas. Por favor, consulte los capítulos correspondientes en el PHP Manual for XSLT.

Desde el capítulo 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.

Desde el capítulo 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.

El recommended extension for using XSL transformations with PHP5 is XSL. Si todo lo que necesita hacer es transformar dos documentos, como se muestra en el ejemplo, considere este ejemplo del Manual de 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); 

El método transformToXML devolverá el documento transformado o FALSE, para que pueda mantener el si/más de tu código. En cualquier caso, debería ser trivial actualizar tu código.

+0

Entonces ... ¿el OP tendrá que volver a compilar PHP? – sholsinger

+0

@sholsinger Sí, a menos que PHP se haya configurado como se citó anteriormente y que la extensión esté deshabilitada en php.ini. Pero XSLT es PECL a partir de PHP5, por lo que es poco probable que este sea el caso. – Gordon

+0

Entonces, teniendo en cuenta que mi hosting es con MediaTemple, ¿es algo que tendré que hacer? –

16

Dependiendo de su distribución de Linux, puede instalar el módulo php5-xsl, agregar la línea "extension = php_xsl.so" a su archivo php.ini y reiniciar su servidor apache2.

Esto funcionó para mí en Ubuntu 11.10. Puede ingresar "sudo apt-get install php5-xsl" en la línea de comandos para instalar php5-xml.

+0

increíble, ¡gracias funcionó para mí! – neildaemond

+0

Funcionó para mí en Ubuntu 14. No fue necesario agregar nada a php.ini. – grimurd

+0

Trabajó para mí en Debian 8.0 ((jessie) 64-bit, y no tuve que agregar nada a php.ini también. –

2

Bueno, es muy simple, pero en php.net podría explicarse más explícitamente.

Estoy usando un contenedor docker que contiene ubuntu base y usa php-fpm.

Los pasos para instalar esta extensión en mi contexto fueron:

Primera extensión de búsqueda XSL en el repositorio de Linux apt-cache XSL búsqueda

acabé encontrando el php5-XSL, por lo que sólo se instale apt-get install php5-xsl

que el proceso de instalación ya se ha añadido la configuración de la instalación, si no sucede, simplemente hacerte vim /etc/php5/mods-available/xsl.ini

insertar este contenido: extension = xsl.por lo

(obviamente, los caminos están de acuerdo con los valores de configuración de php, pero mi ejemplo es la configuración por defecto)

reinicio

PHP pies por minuto y listo!

Cuestiones relacionadas