Content-type не работает в PHP

у меня есть некоторые проблемы с файлом 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-файлы работают как шарм.

что я могу сделать, чтобы разобраться это?

обновление: Сделал изменения default_mimetype = "text/html" to default_mimetype = "text/css" в php.ini и все страницы сразу же интерпретируются как css, поэтому должен быть способ просто отправить заголовки css для этого файла:)

полный файл от demand of John:

    <?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 на сервере, чтобы увидеть, уходит ли проблема, но нет. Те же старые, же старые...

13 ответов


проверьте свой php.ini-файл для параметра output_buffering. Если он не установлен в "off", то PHP автоматически выполняет буферизацию вывода для вас. Установите это в положение off и повторите что-то перед командой заголовка, и вы увидите "классическую ошибку".

вы не должны использовать закрытия ?>. Я знаю, что это спорное предложение, но слишком много раз люди добавляют возврат и/или пространство после него, которое получает вывод в браузер (перед заголовком). Очень немногие случаи где оно если не использовать его, возникнут проблемы.


  1. убедитесь, что ваш редактор файл не сохранить BOM в вашем PHP-файле.
  2. попробуйте переместить error_reporting / ini_set, чтобы сделать их первыми инструкциями PHP (перед вызовом header ()). Таким образом, вы увидите все ошибки (если таковые имеются). Не забудьте отложить это в производство!
  3. глупое замечание, но убедитесь, что этот файл интерпретируется как PHP (расширение .php или если нет .htaccess говорит серверу интерпретировать как РНР.)
  4. все остальное в порядке с вашим кодом. Если он все еще не работает, проверьте журналы сервера. Возможно, что-то еще сбой выполнения этого файла PHP (недопустимый MIME или еще)...

причина в том, что header функция работает только в том случае, если она вызвана первой!

Если вы ставите echo раньше тип содержимого автоматически становился text/html

попробуйте распечатать код CSS после заголовка, чтобы проверить, действительно ли он работает.

читать на этой странице дополнительная информация

EDIT: вы изменили свой пост ? :-)


это обычно вызвано фатальной ошибкой (т. е. синтаксической ошибкой), которая заставляет скрипт прерываться до выполнения любого кода (до того, как display_errors может быть установлен через ini_set () во время выполнения). Попробуйте изменить display_errors в файле конфигурации php (php.ini).


возможно, функция header() отключено в конфигурации?


это может быть стоит проверить с curl чтобы увидеть, какие заголовки на самом деле направляется.

попробуйте это из командной строки и проверьте "text / css":

curl -I http://example.com

в зависимости от заголовков запросов браузера PHP также может отправлять выходные данные gzipped с использованием буферизации вывода. В файле PHP попробуйте это проверить на ob_gzhandler.

print_r(ob_list_handlers());

если он включен, проверьте наличие zlib.output_compression в вашем php.конфигурация ini или Apache.


Я обнаружил, что полный файл имеет отступ.

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

поскольку отступ в строке 1 выводил 4 пробела, следовательно, заголовок не будет работать.


похоже, что ваш веб-сервер интерпретирует скрипт как обычный файл. Есть ли у него .расширение PHP и другие .php файлы работают так, как ожидалось?


выглядит совершенно нормально и линия с echo определенно должно генерировать предупреждение. Может быть, вы редактируете не тот файл?


вы можете попробовать Content-Style-Type: text/css

см. ниже здесь

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

язык таблицы стилей по умолчанию также может быть установлен с заголовок http. Выше мета объявление эквивалентно HTTP заголовок:

Content-Style-Type: text/css

Edit:

на ссылке, это упоминается, чтобы добавить AddType text/css .css в конфигурационном файле apache. Может быть, вы можете дать ему попробуй!--5-->

Edit2 Посмотрите на "css" в этом ссылке. У кого-то были те же проблемы, что и у тебя. Попробуйте отправить заголовок без символов

недавно у меня был волос-угрожающий проблема с Firefox и XHTML 1.0 переходный.

он отлично работал с другими браузерами, а также с HTML 4.1.

чтобы сократить длинную историю короткой, PHP-генерируемые JS и CSS файлы были все еще сообщается заголовками как text / html, в то время как в HTML они были текст / css и приложение / javascript; В Firefox сказав страница В XHTML 1.0 стал аккуратистом и отказался от стиля страницы. (Я думаю JS все еще работал, но я исправил его в любом случае.)

устранение:

заголовок ('Content-type: text / css'); и заголовок ('Content-type: application / javascript');

Edit 3 Было!--47-->в должности о некоторых формах не отправка любых данных из-за утилиты под названием AVG Linkscanner. Поскольку вы переустановили Apache + php, и я предполагаю, что вы не переустановили ОС, поэтому вы можете исследовать это/попробовать, отключив некоторые утилиты/плагины.


Wild guess: откройте файл с чем-то, что будет отображать любой BOM. Если вы видите какие-то странные символы перед <?php У вас есть ваша проблема. Проверьте текущие параметры редактора, чтобы сохранить файл UTF-8 и сохранить его без спецификации.


возможно, есть проблемы с кэшированием.

попробуйте это:

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 сообщает правильный тип контента.


output_buffering = Off в php.ini был причиной для меня, почему он продолжает отправлять Content-Type = text/html. Установка его в 1 решает его.