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

时间:2011-12-14 10:27:01

标签: php xslt recaptcha

我正在尝试将一个验证码字段添加到XSL文件中的表单中,但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";

这仍然不会显示在前端。

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

4 个答案:

答案 0 :(得分:2)

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

有一些方法可以更改它,并让PHP在离开服务器之前解析每个XSL文件。但是,这对于reasources并不是很好,因为它适用于所有XSL文件。

最简单,最节省资源的方法是为XSL文件提供.php扩展名,并发送正确的MIME类型(是this one吗?我不知道)确保它在客户端得到正确处理:

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

.php扩展名放在那里并不是很好,但也许你不关心虚荣心。

答案 1 :(得分:2)

我怀疑:

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

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

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

    <?php header('Content-Type: application/xslt+xml'); ?>
    
  3. P.S。您可以将XSL包含在PHP文件中,而不是将PHP包含在XSL文件中; - )

答案 2 :(得分:1)

从来没有真正得到正确答案,所以4年后......

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

EG:

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

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

或者你也可以在XSL中调用php函数。查看文档:{​​{3}}

答案 3 :(得分:0)

您确实在文件系统的根目录中有名为recaptchalib.php的文件吗?我怀疑不是......

我认为这一行:

require_once('/recaptchalib.php');

......应该......

require_once('recaptchalib.php');

如果require()文件不存在,则会导致致命错误。请记住require()采用本地路径,因此前导斜杠指的是本地文件系统的根,而不是Web服务器的文档根目录。