我的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以查看问题是否消失,但没有。同样的老,同样的老......
答案 0 :(得分:8)
检查php.ini文件中的output_buffering设置。如果它没有设置为“off”,那么PHP会自动为你做输出缓冲。将它设置为off并在header命令之前回显一些东西,你应该看到“经典错误”。
你不应该使用结束?&gt;。我知道这是一个有争议的建议,但很多时候人们在它之后添加一个返回和/或空格,它会输出到浏览器(在标题之前)。很少有人不使用它会导致问题。
答案 1 :(得分:4)
答案 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)
output_buffering = Off
是我为什么不断发送Content-Type = text/html
的原因。将其设置为1可以解决问题。
答案 13 :(得分:0)
就我而言,我在代码 header('text/javascript');
上挣扎了几个小时,想知道为什么没有发送响应 MIME 类型。正确的 PHP 代码是 header('Content-type: text/javascript');
。在 PHP、Apache、浏览器或 Web 开发人员工具中没有针对此编程错误进行适当的错误检测。