在PHP解释后设置MIME类型

时间:2013-11-20 10:16:34

标签: php apache mime-types httpd.conf

当我使用

AddType application/x-httpd-php .phtml .pwml .php5 .php4 .php3 .php2 .php .inc .htm .html

在httpd.conf中,具有给定扩展名的文件开始由PHP解释器解释。但他们都开始使用'text / html'MIME类型。

我知道我可以使用

<?php header("Content-type: WHATEVER"); ?>

在文件本身,但是可以在PHP解释扩展后立即使用相同的httpd.conf分配MIME类型吗?

我想要的是让PHP解释任何文件类型的方法,无论扩展名是什么,并且不要手动编写头文件,因为它总是可以从扩展中推断出来。换句话说,如果没有分配给PHP解释器,我想保留文件所具有的MIME类型。

1 个答案:

答案 0 :(得分:2)

默认情况下即。什么时候: 您的 mime.types 不包含(*):

application/x-httpd-php php

行,您的 httpd.conf 不包含(**):

PHPIniDir "C:/PHP/"
LoadModule php5_module "C:/PHP/php5apache2_4.dll"

(或类似取决于php的路径和apache版本)

..对 php 文件的任何请求都将返回php的源代码(未解释),Apache将不会设置 Content-Type 所以它取决于你的浏览器如何解释它(谷歌Mime型嗅探)。通常,您只需在浏览器的视口中查看源代码。

如果 mime.types 包含(*)且 httpd.conf 不包含(** )它将告诉Apache使用 Content-Type:application / x-httpd-php 提供 php 文件。 Hovewer仍然是源代码,您的浏览器会询问您是否打开/保存所请求的资源。

一般情况下,如果 httpd.conf 包含(并以这种方式加载php模块):

PHPIniDir "C:/PHP/"
LoadModule php5_module "C:/PHP/php5apache2_4.dll"

(或类似取决于php的路径和apache版本)... mime.types 行:

application/x-httpd-php php

与预期的目的略有不同。它不再为 Content-Type:... HTTP响应提供MIME类型。它告诉Apache应该将哪些文件扩展名发送给PHP解释器。您可以将 mime.types 添加到以下行:

application/x-httpd-php xyz

它将告诉Apache将任何带有 xyz 扩展名的文件的内容发送到PHP解释器,但您的HTTP响应将具有 Content-Type:text / html 设置而不是您想象的 application / x-httpd-php

所以你可以通过将它添加到 mime.types 来完成你想要的东西:

application/x-httpd-php phtml pwml php5 php4 php3 php2 php inc htm html

当然你必须加载你的PHP模块。

您可能还想了解mod_rewrite apache module

即使您将 * xyz (无论)扩展名的文件解释为PHP,您也可以使用以下方式自由更改内容类型:

header('Content-Type: ....');