2013-02-14 85 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