2010-03-24 61 views
9

工作。我在那工作不正常的PHP文件的一些问题。内容类型不会被任何浏览器接收。 Firebug将文件解释为text/html而不是css。这里的文件:内容类型不是PHP

<?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-文件的工作就像一个魅力。

我能做些什么来排序了这一点?

UPDATE: 难道在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的服务器,看看问题是否会消失,但没有。老一套,老...

+0

你能看到什么头文件发送到Figrebug的浏览器? – mojbro 2010-03-24 15:03:52

+0

的Content-Type:\t text/html的 – Industrial 2010-03-24 15:08:16

+0

我知道这是一个愚蠢的问题,但您在输出之前关闭 2010-03-24 15:29:44

回答

6

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

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

+1

这已经没有争议了(至少从2012年6月开始)[PSR-2明确禁止在文件末尾使用'?>'结尾](http://www.php-fig .ORG/PSR/PSR-2 /#2-2文件)。 – alexw 2016-07-13 20:53:09

2

的原因是因为header功能仅如果是被称为第一个!

如果一个echo前放,内容将自动输入变得text/html

尝试打印CSS代码的头之后,以测试它的实际工作。

阅读this page更多的相关信息

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

+0

嗨!是的,编辑了这个帖子使它更清晰了一点,对不起! – Industrial 2010-03-24 15:11:29

+2

更新:尝试覆盖'default_mimetype'从代码的php.ini ... – 2010-03-24 15:26:07

+0

嗨乔瓦尼,为此文件工作!谢谢! – Industrial 2010-03-24 16:08:08

0

这听起来像你的Web服务器解释脚本作为一个正常的文件。它是否有.php扩展名,其他.php文件是否按预期工作?

+0

嗨!它肯定会的。其他所有工作正常就像魅力一样,Mod_rewrite也被启用! – Industrial 2010-03-24 15:08:57

0

看起来完全正常,正在与echo行一定要产生一个警告。难道是你正在编辑错误的文件?

+0

恐怕不是,这是我的清单中的第一个尝试:) – Industrial 2010-03-24 15:06:55

1

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

+0

实际上清理了整个文件,只是有标题行。它仍然不想解释为CSS。 – Industrial 2010-03-24 15:17:48

+0

发布css,有些东西正在导致致命错误。这就是为什么底部的echo语句没有做任何事情,php错误没有被显示。在你的css中可能会有某些东西在破坏脚本(特别是如果你正在回应它,它很容易错过一个未经转义的报价) – 2010-03-24 15:55:22

+0

嗨,约翰,在第一篇文章中发布了完整的文件,尽管它只是一行Css应该是有效的... – Industrial 2010-03-24 16:05:00

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,它mentionned在Apache的配置文件中添加AddType text/css .css。 也许你可以试试看

EDIT2 在这个link查一查为“CSS”。有人和你有同样的问题。尝试发送头没有的字符集

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

它可以很好地与其他浏览器, 和HTML 4.1一起工作。

为了削减长话短说, PHP生成的JS和CSS文件是 仍被报告的标题为 text/html的,而在HTML他们 文本/ css和应用程序/ JavaScript的; Firefox已被告知页面为 XHTML 1.0成为肛门保留型, 拒绝对页面进行样式设置。 (我觉得 的JS仍然工作,但我固定它 反正。)

解决方案:

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

编辑3 有一个post的一些形式不提交,因为所谓的AVG LinkScanner的一个工具的任何数据。既然你已经重新安装了Apache + php,我假设你没有重新安装操作系统,所以你可以通过关闭一些实用程序/插件来调查这个/尝试。

+0

不!没有改变任何恐惧:( – Industrial 2010-03-24 15:16:25

+0

再次!在httpd.conf和.htaccess中都试过,没有成功...... – Industrial 2010-03-24 15:42:59

+0

再次尝试发送内容类型,但没有任何字符集。 – Industrial 2010-03-24 22:35:57

1

也许函数header()在您的配置中被禁用?

测试:

print ini_get('disable_functions'); 
1

这可能是值得curl检查,看看实际上正在发送的报头。

在命令行试试这个,检查是否有“文/ CSS”:

curl -I http://example.com 

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

print_r(ob_list_handlers()); 

如果它的启用,检查在你的php.ini或Apache配置zlib.output_compression

0

大胆猜测:打开你的文件有一些东西,会显示任何BOM。如果你在<?php之前看到一些奇怪的字符,你有问题。检查您当前的编辑器选项以保存UTF-8文件并使其无需BOM保存。

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的报道正确的内容类型。

4
  1. 确保你的文件编辑器保存BOM在你的PHP文件。
  2. 尝试移动error_reporting/ini_set,使其成为第一个PHP语句(在header()调用之前)。这样你会看到所有的错误(如果有的话)。 不要忘记把这个关闭在生产!
  3. 傻的话,但要确保该文件将被解释为PHP(扩展名为.php或如果没有一个.htaccess告诉服务器解释为PHP)。
  4. 其他一切都很好,你的代码。如果仍然不起作用,请检查您的服务器日志。也许别的东西崩溃了这个PHP文件(无效的MIME或其他)的执行...
+1

嗨!没有什么新的。在服务器日志中,我会尝试你的第一个tstep,然后回来。谢谢 – Industrial 2010-04-14 20:03:28

+0

你可能想要在.htaccess文件中加入'Content-Type'属性(例如'ForceType'和' AddType') – Tim 2013-10-03 09:29:36

1

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

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

由于第1行的缩进输出4个空格,所以标题将不起作用。