2011-12-14 101 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

相關問題