内容类型不适用于PHP

时间:2010-03-24 14:59:49

标签: php apache content-type wamp

我的PHP文件有些问题无法正常工作。任何浏览器根本不会收到Content-type。 Firebug将文件解释为text / html而不是css。这是文件:

<?php
header('Content-Type: text/css; charset=UTF-8');
error_reporting(E_ALL | E_STRICT);
ini_set('display_errors', 'On');
/* CSS goes on from here */

我测试了在标题行前加echo 'TEST';行,并期望看到经典的“标题已发送”错误,但没有出现任何内容!

正常的.css文件就像魅力一样。

我可以做些什么来解决这个问题?

更新 在php.ini中将default_mimetype = "text/html"更改为default_mimetype = "text/css"并且所有页面都立即被解释为css,因此必须有一种方法来为此文件发送css标头:)

约翰要求的完整档案:

    <?php
    header('Content-Type: text/css; charset=UTF-8');
    echo 'body {background-color: #000000; }';
    ?>

更新#2:ini_set('default_mimetype', 'text/css');添加到PHP文件会修复此文件,但它无法解决导致此错误的问题...

更新#3: 测试向.htaccess和Apache配置添加AddType text/css .css。仍然没有运气。还测试了发送与charset分开的标题:header('Content-Type: text/css'); - 仍然没有运气......

更新#4: 已在服务器上重新安装Apache + PHP以查看问题是否消失,但没有。同样的老,同样的老......

14 个答案:

答案 0 :(得分:8)

检查php.ini文件中的output_buffering设置。如果它没有设置为“off”,那么PHP会自动为你做输出缓冲。将它设置为off并在header命令之前回显一些东西,你应该看到“经典错误”。

你不应该使用结束?&gt;。我知道这是一个有争议的建议,但很多时候人们在它之后添加一个返回和/或空格,它会输出到浏览器(在标题之前)。很少有人不使用它会导致问题。

答案 1 :(得分:4)

  1. 确保您的文件编辑器在您的PHP文件中保存BOM
  2. 尝试移动error_reporting / ini_set以使它们成为第一个PHP语句(在header()调用之前)。这样您就会看到所有错误(如果有的话)。 不要忘记将其关闭生产!
  3. 愚蠢的评论,但请确保此文件被解释为PHP(扩展名为.php或者如果不是.htaccess则告诉服务器将其解释为PHP)。
  4. 其他所有内容都适用于您的代码。如果仍然无效,请检查服务器日志。也许其他东西崩溃了这个PHP文件的执行(无效的MIME或其他)......

答案 2 :(得分:2)

原因是header函数只有在第一个被调用时才有效!

如果您之前添加了echo,则内容类型会自动变为text/html

尝试在标题之后打印CSS代码以测试它是否真的有效。

阅读this page了解更多信息

编辑:你改变了帖子吗? : - )

答案 3 :(得分:1)

这通常是由致命错误(即语法错误)导致脚本在任何代码执行之前中止(在运行时通过ini_set()设置display_errors之前)。尝试更改php配置文件(php.ini)中的display_errors。

答案 4 :(得分:1)

您的配置中是否禁用了函数header()

测试:

print ini_get('disable_functions');

答案 5 :(得分:1)

使用curl进行检查可能值得查看实际发送的标头。

从命令行尝试此操作并检查“text / css”:

curl -I http://example.com

根据浏览器的请求标头,PHP也可以使用输出缓冲来发送输出gzip。在PHP文件中,尝试检查ob_gzhandler

print_r(ob_list_handlers());

如果已启用,请在php.ini或Apache配置中签入zlib.output_compression

答案 6 :(得分:1)

我发现整个文件是缩进的。

    <?php
    header('Content-Type: text/css; charset=UTF-8');
    echo 'body {background-color: #000000; }';
    ?>

因为第1行的缩进输出了4个空格,所以标题不起作用。

答案 7 :(得分:0)

这听起来像您的网络服务器将脚本解释为普通文件。它是否有.php扩展名,并且其他.php文件是否按预期工作?

答案 8 :(得分:0)

看起来非常好,echo的行肯定会产生警告。可能是你正在编辑错误的文件吗?

答案 9 :(得分:0)

您可以尝试Content-Style-Type: text/css

请参阅here

中的以下内容

<META http-equiv="Content-Style-Type" content="text/css">

  

也可以使用默认样式表语言进行设置   HTTP标头。以上META   声明等同于HTTP   头:

     

Content-Style-Type: text/css

修改

link,提到要在apache配置文件中添加AddType text/css .css。 也许你可以尝试一下

<强> EDIT2 link处查找“css”。有人和你有同样的问题。尝试发送不带字符集的标题

  

我最近有一个头发威胁   Firefox和XHTML 1.0的问题   过渡性的。

     

它适用于其他浏览器,   以及HTML 4.1。

     

简而言之,   PHP生成的JS和CSS文件是   仍然被标题报告为   text / html,而在HTML中   text / css和application / javascript;   Firefox被告知该页面是   XHTML 1.0变得具有肛门保持力   拒绝设置页面样式。 (我认为   JS仍然有效,但我修复了它   反正。)

     

解决方案:

     

标题('Content-type:text / css');和   报头(“内容类型:   应用/ JavaScript的');

编辑3 由于名为AVG Linkscanner的实用程序,某些表单没有提交任何数据,因此有一个post。由于你已经重新安装了Apache + php,我认为你没有重新安装操作系统,所以你可以通过关闭一些实用程序/插件来调查这个/尝试。

答案 10 :(得分:0)

狂野猜测:用显示任何BOM的内容打开您的文件。如果您在<?php之前看到一些奇怪的字符,那么您就会遇到问题。检查当前的编辑器选项以保存UTF-8文件并使其保存而无需BOM。

答案 11 :(得分:0)

可能存在缓存问题。

试试这个:

header('Content-type: text/css');
header("Cache-Control: no-cache, must-revalidate");
header("Expires: Sat, 26 Jul 1997 05:00:00 GMT");

echo 'body {background-color: #000000; }';

在开箱即用的XAMPP安装和firefox - firebug报告正确的内容类型时为我工作。

答案 12 :(得分:0)

php.ini中的

output_buffering = Off是我为什么不断发送Content-Type = text/html的原因。将其设置为1可以解决问题。

答案 13 :(得分:0)

就我而言,我在代码 header('text/javascript'); 上挣扎了几个小时,想知道为什么没有发送响应 MIME 类型。正确的 PHP 代码是 header('Content-type: text/javascript');。在 PHP、Apache、浏览器或 Web 开发人员工具中没有针对此编程错误进行适当的错误检测。