11

我遇到了一些无法正常工作的 PHP 文件的问题。任何浏览器都不会收到内容类型。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: 测试添加AddType text/css .css到 .htaccess 和 Apache 配置。仍然没有运气。还测试发送与字符集分开的标题:header('Content-Type: text/css');- 仍然没有运气......

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

4

14 回答 14

11

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

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

于 2010-04-16T00:33:57.123 回答
5
  1. 确保您的文件编辑器没有在您的 PHP 文件中保存BOM 。
  2. 尝试移动 error_reporting / ini_set 以使它们成为第一个 PHP 语句(在 header() 调用之前)。这样您将看到所有错误(如果有)。不要忘记在生产中关闭它!
  3. 愚蠢的评论,但请确保此文件被解释为 PHP(扩展名是 .php 或者如果不是 .htaccess,则告诉服务器解释为 PHP)。
  4. 您的代码其他一切都很好。如果它仍然不起作用,请检查您的服务器日志。也许其他东西会导致这个 PHP 文件的执行崩溃(无效的 MIME 或其他)......
于 2010-04-13T14:58:40.577 回答
2

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

如果你放一个echobefore,内容类型会自动变成text/html

尝试在标头之后打印 CSS 代码以测试它是否确实有效。

阅读此页面了解更多信息

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

于 2010-03-24T15:04:08.683 回答
1

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

于 2010-03-24T15:08:45.367 回答
1

也许header()您的配置中禁用了该功能?

测试:

print ini_get('disable_functions');
于 2010-04-10T21:30:12.363 回答
1

可能值得用curl检查一下实际发送了哪些标头。

从命令行尝试这个并检查“text/css”:

curl -I http://example.com

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

print_r(ob_list_handlers());

如果已启用,请检查zlib.output_compression您的 php.ini 或 Apache 配置。

于 2010-04-13T12:27:19.130 回答
1

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

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

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

于 2010-04-16T00:05:39.887 回答
0

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

于 2010-03-24T15:04:20.570 回答
0

看起来完全没问题,带有 的行echo肯定会产生警告。会不会是你编辑了错误的文件?

于 2010-03-24T15:04:45.980 回答
0

你可以试试Content-Style-Type: text/css

这里看下面

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

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

Content-Style-Type: text/css

编辑:

链接中,提到了AddType text/css .css在 apache 配置文件中添加。也许你可以试一试

Edit2在此链接 中查找“css” 。有人和你有同样的问题。尝试发送不带字符集的标题

我最近在使用 Firefox 和 XHTML 1.0 过渡时遇到了威胁头发的问题。

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

长话短说,PHP 生成的 JS 和 CSS 文件仍然被标题报告为 text/html,而在 HTML 中它们是 text/css 和 application/javascript;Firefox 被告知该页面是 XHTML 1.0 变得固执并拒绝为页面设置样式。(我认为 JS 仍然有效,但我还是修复了它。)

解决方案:

header('内容类型:文本/css'); 和 header('Content-type: application/javascript');

编辑 3 有一篇关于某些表单由于名为 AVG Linkscanner 的实用程序而未提交任何数据的帖子。由于您已经重新安装了 Apache + php,并且我假设您没有重新安装操作系统,因此您可以通过关闭一些实用程序/插件来对此进行调查/尝试。

于 2010-03-24T15:12:25.577 回答
0

疯狂的猜测:用可以显示任何BOM的东西打开您的文件。如果您在<?php遇到问题之前看到一些奇怪的字符。检查您当前的编辑器选项以保存 UTF-8 文件并使其在没有 BOM 的情况下保存它们。

于 2010-04-13T12:37:13.867 回答
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 报告正确的内容类型。

于 2010-04-13T14:39:29.093 回答
0

output_buffering = Off在 php.ini 中是我为什么它不断发送的原因Content-Type = text/html。将其设置为 1 即可解决。

于 2018-05-30T05:07:43.297 回答
0

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

于 2021-07-12T12:11:52.363 回答