2011-09-22 38 views
3

我正在一個瘋狂的混亂的CMS系統中,php,javascript和html都在模板中。我試圖從第三方網站整合功能的代碼下降,但他們有形式的javascript:試圖嵌入使用<?js = value?>的第三方Javascript,我該如何停止解析「<?」的php。

<script type="lib"> 
Hello, <?js= firstName ?>! 
</script> 

PHP解釋器看到的和做它的事,因此,整個模板的錯誤了。

任何人都知道如何包裝這個代碼塊,以防止PHP解釋器關心它?

在此先感謝!

+4

什麼CMS軟件決定'<?js = firstName?>'是個好主意? –

回答

3

禁用PHP Short-Tags,你不應該有問題。

+0

有沒有辦法做到這一點?該網站的其他部分廣泛使用它們,因此禁用它們與服務器上的PHP級別不是一個選項。 – csjohn

+0

@csjohn - 你不能用'ini_set'來禁用它們。您可能需要仔細觀察才能找到答案。 – Neal

1

你碰巧在運行Apache嗎?這些文件是否獨立於PHP?如果是這樣,你可以使用.htaccess文件(或者httpd.conf中,如果您有權對其進行修改)做這樣的事情:

<FilesMatch "\.template_file_ext"> 
    php_flag engine off 
</FilesMatch> 
+0

是的好電話。不幸的是,這裏使用的蹩腳的CMS將模板存儲在數據庫中而不是特定的文件。儘管如此,我最終發現了一個醜陋的修復。 – csjohn

4

如果禁用PHP短標籤是不是一種選擇,你可以簡單地輸出,所述使用字符串PHP,那麼你會得到這樣的事情:

Hello, <?php print "<?js= firstName ?>"; ?>! 
+0

感謝您的迴應。我嘗試過這樣做,但並沒有結束這個訣竅,但我發現了一個特別針對CMS的非常難看的解決方案。 – csjohn

3

short open tags一個PHP文件啓用,PHP解釋器將看到<?js標籤的<?一部分,並會嘗試解析它作爲PHP,導致此錯誤:

Parse error: syntax error, unexpected T_STRING in ... on line ... 

要解決該問題,請禁用PHP的開放標記的簡寫(<? ?>)。

現在將禁用在您的PHP腳本中使用<?<?=。如果您的網站只使用<?php標籤,那麼這是安全的;如果它使用<?以及那麼它不是安全的,因爲你的腳本將不再按預期運行。

有兩種方式您的虛擬主機或系統管理將有configured Apache to use PHP

  • 阿帕奇加載PHP解釋器作爲Apache模塊
  • Apache運行PHP解釋器以二進制CGI

您將在下面使用哪種解決方案取決於Apache在您的環境中如何運行PHP *。

在Apache的.htaccess文件,將以下內容:

# PHP as an Apache Module 
php_value short_open_tag 0 

在全球或本地php.ini文件,將以下內容:

# PHP as a CGI Wrapper 
short_open_tag = Off 

在這兩種情況下,你要重新啓動Apache進行任何配置更改後,以確保您的新設置得到提取。


注:如果您的服務器被配置爲運行PHP作爲Apache模塊,那麼你可以選擇是使用一個php.ini或Apache .htaccess文件的選擇。但是,如果您的服務器將PHP作爲CGI包裝器運行,那麼您將只能在本地使用php.ini文件來更改設置,因爲Apache不再完全控制PHP。

當PHP作爲CGI包裝運行時,將PHP設置放入.htaccess文件將導致服務器發生錯誤。

相關問題