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

我可以在XSL文件中包含PHP吗?,php,xslt,recaptcha,Php,Xslt,Recaptcha,我试图将captcha字段添加到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"; e

我试图将captcha字段添加到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>
这仍然不会显示在前端


非常感谢您的帮助。

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

我认为这句话:

require_once('/recaptchalib.php');
…应该是

require_once('recaptchalib.php');

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

您的文件系统根中是否真的有名为recaptchalib.php的文件?我怀疑不是

我认为这句话:

require_once('/recaptchalib.php');
…应该是

require_once('recaptchalib.php');

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

PHP解释器可能没有解析文件扩展名

有很多方法可以改变这一点,让每个XSL文件在离开服务器之前由PHP解析。但是,这对reasources来说并不是很好,因为它将应用于所有XSL文件

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

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

像这样有.php扩展名并不好看,但可能虚荣不是你的问题。

你的文件扩展名可能没有被php解释器解析

有很多方法可以改变这一点,让每个XSL文件在离开服务器之前由PHP解析。但是,这对reasources来说并不是很好,因为它将应用于所有XSL文件

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

header("Content-type: {insert type here}");
有这样的.php扩展并不好看,但也许虚荣不是你关心的问题。

我怀疑:

该文件具有*.xsl扩展名,您的web服务器未配置为将*.xsl文件作为PHP代码处理。 PHP代码在文档中显示为未解析,但您使用浏览器的呈现视图来查看它,而不是查看源代码。 有几种可能的解决方案,但最简单的是:

将文件重命名为*.php。 在文件顶部添加以下内容:

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

我怀疑:

该文件具有*.xsl扩展名,您的web服务器未配置为将*.xsl文件作为PHP代码处理。 PHP代码在文档中显示为未解析,但您使用浏览器的呈现视图来查看它,而不是查看源代码。 有几种可能的解决方案,但最简单的是:

将文件重命名为*.php。 在文件顶部添加以下内容:

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

另外,您可以在PHP文件中包含XSL,而不是在XSL文件中包含PHP-

从未真正得到正确答案,因此4年后

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

例如:

您还可以在CDATA部分使用php。很明显,xsl的输出需要是一个php文件,并在浏览器或其他任何地方被称为php文件


或者,您也可以从XSL中调用php函数。检查这里的文档:

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

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

例如:

您还可以在CDATA部分使用php。很明显,xsl的输出需要是一个php文件,并在浏览器或其他任何地方被称为php文件


或者,您也可以从XSL中调用php函数。检查此处的文档:

这是什么类型的服务器?这是什么类型的服务器?这不是问题所在,文件位于根目录下。Thanks@GeoffJackson没问题——这似乎是最有可能的答案。阿尔瓦罗·G·维卡里奥和佩卡都给出了基本相同的答案,这是下一个最可能的罪魁祸首——您的XSL文件没有传递给PHP解释器。对此,可能的解决方案多种多样,但它们都提出了可能最简单的方法,即为文件提供.php扩展名。这不是问题所在,文件位于根目录下。Thanks@GeoffJackson没问题——这似乎是最有可能的答案。阿尔瓦罗·G·维卡里奥和佩卡都给出了基本相同的答案,这是下一个最可能的罪魁祸首——您的XSL文件没有传递给PHP解释器。解决这一问题的可能方法多种多样,但它们都提出了可能最简单的方法,即gi
这是一个复杂的、有点$hit的CMS平台,有数百个XSL文件,所有这些文件都为不同的模块相互链接——整个XSL文件在整个文档中调用其他XSL模板——它还引用一个类/函数文件,并通过一个XLSTprocessor进行所有中继——这完全超出了我的理解因为我对XSL和这个处理器的工作原理一无所知,但我非常确定开始更改任何文件的文件扩展名都会导致几乎整个模块崩溃:/p,这是另一回事。您必须使用框架的机制(如果有的话)注入动态内容。这是一个复杂的、有点$hit的CMS平台,有数百个XSL文件,所有这些文件都为不同的模块相互链接——整个XSL文件在其他XSL模板中调用——它还引用一个类/函数文件和所有通过XLSTprocessor进行中继这完全超出了我的理解范围,因为我对XSL和该处理器的工作方式一无所知,但我非常确定,开始更改任何文件的文件扩展名都会导致几乎整个模块崩溃:/p,这是另一回事。您必须使用框架的机制(如果有的话)注入动态内容。我不确定解析是否正确,但它不会破坏页面并导致大量XLSTprocessor错误出现在页面上,就像我添加recaptcha的许多其他尝试一样-因此,我想这可能是我不知道的解析?。仅此目录就包含43个XSL文件,所有这些文件都被相互调用并在整个目录中引用。我非常确定更改任何文件名都会破坏某些东西,而且非常确定-将XSL更改为PHP扩展名的原因:警告:XSLTProcessor::importStylesheet[XSLTProcessor.importStylesheet]:I/O警告:无法加载外部entity@Geoff好吧,这一定与你使用的任何系统有关-你需要查看它以找出如何解决这个问题。但正如上面与Alvaro的讨论中所发现的,这可能比这更复杂好吧,谢谢你的帮助,我甚至不认为我会费心尝试添加验证码,不幸的是,我无法阻止垃圾邮件发送者-多么荒谬的系统!谢谢,虽然佩卡。我不确定解析是否正确,但它并没有破坏页面,也没有导致大量XLSTprocessor错误出现在页面上,就像我添加recaptcha的许多其他尝试一样-所以,我想这可能是我不知道的解析?。仅此目录就包含43个XSL文件,所有这些文件都被相互调用并在整个目录中引用。我非常确定更改任何文件名都会破坏某些东西,而且非常确定-将XSL更改为PHP扩展名的原因:警告:XSLTProcessor::importStylesheet[XSLTProcessor.importStylesheet]:I/O警告:无法加载外部entity@Geoff好吧,这一定与你使用的任何系统有关-你需要查看它以找出如何解决这个问题。但正如上面与Alvaro的讨论中所发现的,这可能比这更复杂好吧,谢谢你的帮助,我甚至不认为我会费心尝试添加验证码,不幸的是,我无法阻止垃圾邮件发送者-多么荒谬的系统!谢谢,佩卡。这看起来很有希望,扎克,谢谢你的意见。唉,我不再在任何项目上使用这个平台,所以我无法测试它,但希望这能帮助任何未来的访问者解决这个问题。这看起来可能是有希望的zak,谢谢你的输入。唉,我不再在任何项目上使用这个平台,所以我无法测试它,但希望这能帮助任何未来的访问者解决这个问题。