2013-02-14 82 views
0
執行

我對我所做的Apache的一個Apache/PHP基於服務器通過下面的行/etc/mime.types執行jshtmlcss文件作爲PHP :的Apache/PHP設置MIME類型爲PHP

應用程序/ X的httpd - PHP PHTML PHT PHP JS HTML CSS

我們這樣做是因爲,即使我們保存爲.html/.js/.css幾乎完全非PHP的任何文件,W需要在其中進行一些模板化(例如,根據我們是在實時服務器還是測試服務器上,更改某些URL的域)。

麻煩的是,這種使Apache將這些文件視爲PHP的方法會導致它們返回錯誤的MIME類型,至少在Chromium中破壞了css文件,並且在其他瀏覽器中可能也有不良效果。

有沒有一種方法可以告訴Apache將這些文件作爲PHP執行,但仍然輸出正確的MIME類型作爲其文件擴展名?我不希望有手工粘貼

<?php 
    header("Content-type: text/css"); 
?> 

我們所有.css文件的頂部。

+0

也許PHP的自動預先準備會做的伎倆? – OpenSorceress 2013-02-14 15:44:11

+0

http://php.net/manual/en/ini.core.php/#ini.auto-prepend-file – OpenSorceress 2013-02-14 15:48:36

回答

1

看來值得我提的是,我曾經最終需要問這個問題的唯一原因是執迷不悟的做法我d取決於由PHP執行的.js.css文件。

請勿修改您的mime.types文件以實現此目的。相反,在你的Apache配置(或在.htaccess文件),使用調用是這樣的:

<Files *.js> 
    ForceType application/x-httpd-php 
    Header set Content-Type "application/javascript" 
</Files> 
<Files *.css> 
    ForceType application/x-httpd-php 
    Header set Content-Type "text/css" 
</Files> 
0

你可以做到這一點有兩種方式:

  1. 創建.htaccess文件。

    現在在這個文件中,使所有的PHP文件被讀取爲.js.css。理想情況下,你將有文件,如:style.css.phpscripts.js.php和Apache的執行,但用戶將越來越URL作爲style.cssscripts.js

  2. 使用MIME類型

    正如您已經說過的那樣,通過使用以下內容,您可以在PHP中執行這些操作。

    application/x-httpd-php phtml pht php js html css 
    

    或者另一種方式是這樣的:

    <FilesMatch "^.*?css*?$"> 
        SetHandler php5-script 
    </FilesMatch> 
    
+0

我試過使用方法#2;我在/etc/mime.types的行尾刪除了'css',並將您提供的FilesMatch標記粘貼到我的httpd.conf中,但它沒有改變任何內容;我仍然得到錯誤的MIME類型的CSS文件吐出。我誤解了你的指示嗎? – 2013-02-14 15:57:46

+0

呃...它在這裏工作...你使用什麼瀏覽器?鉻: – 2013-02-14 16:03:09

+0

鉻。開發人員工具中顯示的MIME類型仍以「text/html」形式出現。我清除了瀏覽器緩存,所以這不是問題。這絕對是一個MIME類型的問題,因爲如果我把'header(「Content-type:text/css」);'放在冒犯的CSS文件的頂部,一切正常。 – 2013-02-14 16:09:24

2

我們這樣做是因爲,即使我們保存爲的.html/.js文件/的CSS幾乎完全非PHP的任何文件,我們需要在它們中做一些模板

爲什麼不做主動文件中的動態部分,那麼你在哪裏動態的anywa ÿ?通過PHP解釋器運行所有資源是一種浪費。

對於JavaScript:

<script> 
domain = "<? echo $domain; ?>"; <----- dynamic bits here 
</script> 
<script src="xyz.js"></script> <----- you can use them in xyz.js 

對於CSS:

<link rel="stylesheet" href="stylesheet.css"> 

<style type="text/css"> 
/* insert dynamic CSS here, overriding parts from the static style sheet */ 

.my_div { color: <? echo $color; ?> } 

</style> 
+0

'+ 1'嘿,這個想法是好人! :)謝謝... :) – 2013-02-14 15:44:10

+0

是的,我考慮過效率的影響,你幾乎肯定是正確的,從長遠來看,我們應該改變這一點。但是,按照自己的方式進行操作要求:1)我們有一大堆樣板文件,我們將其拷貝到每個包含這些CSS文件之一的HTML文檔;或者2)我們有一個PHP腳本/函數,我們可以在任何我們想要的地方運行如上面所示,包含這些CSS文件中的一個,該文件將鏈接和樣式標籤分離出來。選項#1是海量代碼重複。選項#2需要爲每個我們想要使用模板的樣式表創建兩個文件,而不是一個。 – 2013-02-14 16:02:06