如何在 PHP 5 中启用 XSLT 函数?

Posted

技术标签:

【中文标题】如何在 PHP 5 中启用 XSLT 函数?【英文标题】:How do I enable XSLT functions in PHP 5? 【发布时间】:2011-05-25 23:05:22 【问题描述】:

我想使用 xslt 将 xml 文件作为 html 嵌套列表打印出来,据我所知代码是正确的,但是我收到了这个错误

致命错误:调用未定义函数 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.net/manual/en/xslt.installation.php 【参考方案1】:

根据您的 linux 发行版,您可以只安装 php5-xsl 模块,将“extension=php_xsl.so”行添加到您的 php.ini 文件中,然后重新启动您的 apache2 服务器。

这在 Ubuntu 11.10 上对我有用。可以在命令行输入“sudo apt-get install php5-xsl”安装php5-xml。

【讨论】:

在 ubuntu 14 上为我工作。不需要向 php.ini 添加任何内容。 在 Debian 8.0 ( (jessie) 64 位上为我工作,我也不需要向 php.ini 添加任何内容。【参考方案2】:

您必须 compile PHP 支持它并确保拥有所有必需的依赖项。请参阅PHP Manual for XSLT中的相应章节。

来自Requirements章节

此扩展需要 libxml PHP 扩展。这意味着也需要传入 --enable-libxml ,尽管这是隐式完成的,因为 libxml 默认是启用的。这个扩展使用 Sablotron 和 expat,它们都可以在 »http://freshmeat.net/projects/sablotron/ 找到。提供二进制文件和源代码。通过在 PHP 4 中使用 --with-xslt 选项来启用。

来自Installation章节

在 Unix 上,使用 --enable-xslt --with-xslt-sablot 选项运行配置。 Sablotron 库应该安装在编译器可以找到的地方。确保您有与 Sablotron 库链接的库与那些与 PHP 链接的库相同。配置选项: --with-expat-dir=DIR --with-iconv-dir=DIR 可以帮助您指定它们。在寻求支持时,请始终提及这些指令,以及您的系统上是否安装了这些库的其他版本。当然,提供所有版本号。

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,因此您可以保留代码中的 if/else。无论如何,升级您的代码应该是微不足道的。

【讨论】:

所以... OP 需要重新编译 PHP? @sholsinger 是的,除非 PHP 已经像上面引用的那样配置,并且扩展在 php.ini 中被禁用。但是 XSLT 从 PHP5 开始是 PECL,所以不太可能是这种情况。 所以请记住,我的主机是通过 MediaTemple 进行的,这是我需要让他们做的事情吗? @Chris 我假设这是共享主机,然后没有对机器的 root 访问权限。你可以问他们,但我怀疑他们是否会为共享主机设置这样做。如果您展示的代码不仅仅是多行代码的简化示例,我强烈建议您更改代码以使用新的扩展。 @Chris 这些是 libxml 报告的关于无效标记的错误。您可以使用libxml_use_internal_errors(TRUE)libxml_clear_errors 禁用它们。但是,最好更正 XML。对于 armstrong.xml,xml 序言之前有空格。在 XSL 的情况下,我认为错误消息非常明显。它们似乎源于孤立的关闭 li 元素。【参考方案3】:

嗯,很简单,但在 php.net 上可以更明确地解释。

我正在使用一个包含 ubuntu 基础并使用 php-fpm 的 docker 容器。

在我的上下文中安装这个扩展的步骤是:

首先在 linux 存储库上搜索 xsl 扩展 apt-cache search xsl

我最终找到了 php5-xsl,所以它只是安装 apt-get install php5-xsl

那个安装过程setup配置已经加进去了,如果没有,自己弄 vim /etc/php5/mods-available/xsl.ini

插入此内容: extension=xsl.so

(显然路径是根据你的php配置设置的,但我的例子是默认配置)

重启你的php fpm并完成!

【讨论】:

以上是关于如何在 PHP 5 中启用 XSLT 函数?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 XSLT 中编写 PHP

如何使用 PHP 7 启用 MySQL [重复]

document() 函数在 XSLT 中如何工作?

如何在 php.ini 中启用 imap

如何在 PHP 7 中启用 MySQLi 扩展?

如何在 php 中添加启用或禁用格式的复选框?