2011-12-14 100 views
1

我试图验证码字段添加到表单中的XSL文件中,但PHP没有出现被显示在网页上: -我可以在PHP中包含XSL文件吗?

我目前有: -

<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 "Hello World"; 

这仍然没有正面展示结束。

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

+0

这是什么样的服务器? – 2011-12-14 10:34:29

回答

0

你真的在你的文件系统的根目录下有一个名为recaptchalib.php的文件吗?我想,不是......

我觉得这行:

require_once('/recaptchalib.php'); 

...应该是...

require_once('recaptchalib.php'); 

如果require()不存在的文件,这将导致一个致命的错误。请记住,require()需要本地路径,以便前导斜杠指向您的本地文件系统的根目录,而不是您的Web服务器的文档根目录。

+0

这不是问题,该文件位于根目录。谢谢 – zigojacko 2011-12-14 11:24:18

+0

@GeoffJackson没问题 - 就像是最可能的答案。 ÁlvaroG. Vicario和Pekka都发布了基本相同的答案,这是下一个最可能的罪魁祸首 - 您的XSL文件没有被传递给PHP解释器。对此可能的解决方案有很多种,但它们都提出了最简单的方法,即给文件一个`.php`扩展名。 – DaveRandom 2011-12-14 11:30:39

2

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

有许多方法可以改变这一点,并让PHP在离开服务器之前解析每个XSL文件。但是,这对于重新生成并不是很好,因为它适用于所有XSL文件。

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

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

它不漂亮有.php扩展有这样的,但也许没有虚荣心你的关心。

+0

我对解析没有把握,但它并没有破坏页面,导致页面上出现大量XLST处理器错误(就像我为添加recaptcha所做的许多其他尝试一样) - 所以,我想认为也许这是解析(我不知道?)。该目录本身包含43个XSL文件,所有这些文件都被相互调用并在整个过程中引用。 – zigojacko 2011-12-14 11:31:11

+0

我很肯定地改变任何文件名会破坏某些东西,果然 - 将XSL更改为PHP扩展会导致:Warning:XSLTProcessor :: importStylesheet()[xsltprocessor.importstylesheet]:I/O警告:未能加载外部实体 – zigojacko 2011-12-14 11:32:46

2

我怀疑:

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

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

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

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

附:而不是包括在XSL文件PHP,你可以包括XSL在PHP文件;-)

1

从来没有真正正确的答案,那么4年之后...

把包括或要求内xsl:文本块,禁用输出转义并使用CDATA部分。

EG:

<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

相关问题