我可以在XSL文件中包含PHP吗?


Can I include PHP in an XSL file?

我试图在XSL文件内的表单中添加captcha字段,但PHP似乎没有在页面上呈现:-

我现在有:-

<xsl:call-template name="signature">
<xsl:with-param name="text" select="signature" />
</xsl:call-template>
<?php
require_once('/recaptchalib.php');
$publickey = "public_key";
echo recaptcha_get_html($publickey);
?>
<div class="forum_default_margin_top">
<input type="submit" name="post_submit" value="Submit" onclick="tinyMCE.triggerSave(); if (!f.checkPostTopicValues(document.forms['new_topic'].topic_subject, document.forms['new_topic'].topic_text, document.forms['new_topic'].signature, true)) return false;" class="forum_default_margin_right" />
<input type="reset" name="cancel" value="Cancel" onclick="return f.cancelNewTopic('{forum/uri}', 0)" />
</div>

上面和下面有更多的代码,但上面显示了我如何试图在文件中包含php,但前端没有呈现-即使我包含echo语句

echo "Hello World";

这仍然不显示在前端。

任何帮助都非常感谢,非常感谢。

您的文件扩展名可能没有被PHP解释器解析。

有一些方法可以改变这种情况,让PHP在每个XSL文件离开服务器之前对其进行解析。然而,这对于资源来说并不是很好,因为它将适用于所有XSL文件。

最简单和最节省资源的方法是给XSL文件一个.php扩展名并发送适当的MIME类型(是这个吗?我不知道),以确保它在客户端得到正确处理:

header("Content-type: {insert type here}");

这样的.php扩展名不好看,但也许虚荣不是你关心的。

我怀疑:

  • 文件有*.xsl扩展名和您的web服务器没有配置为处理*.xsl文件作为PHP代码。
  • PHP代码显示在文档中未解析,但您使用浏览器的渲染视图来查看它,而不是查看源代码

有几种可能的解决方案,但最简单的是:

  1. 重命名为*.php
  2. 添加到文件的顶部:

    <?php header('Content-Type: application/xslt+xml'); ?>
    

注:您可以在PHP文件中包含XSL,而不是在XSL文件中包含PHP;-)

从来没有真正的正确答案,所以四年后…

将include或require放在xsl:text块中,禁用输出转义并使用CDATA节。

,

<xsl:text disable-output-escaping="yes">
        <![CDATA[<?php require_once 'path/to/file.php']]>
</xsl:text>

您也可以在CDATA部分中放置php。显然,xsl的输出需要是一个php文件,并在浏览器或其他地方调用。

也可以从XSL中调用php函数。查看文档:http://php.net/manual/en/xsltprocessor.registerphpfunctions.php

您的文件系统的根目录中真的有一个名为recaptchalib.php的文件吗?

我想这句话:

require_once('/recaptchalib.php');

…应该…

require_once('recaptchalib.php');

如果您require()一个不存在的文件,它将导致致命错误。请记住,require()采用本地路径,因此前斜杠指的是本地文件系统的根,而不是web服务器的文档根。