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 и повторите что-то перед командой заголовка, и вы увидите "классическую ошибку".
вы не должны использовать закрытия ?>. Я знаю, что это спорное предложение, но слишком много раз люди добавляют возврат и/или пространство после него, которое получает вывод в браузер (перед заголовком). Очень немногие случаи где оно если не использовать его, возникнут проблемы.
- убедитесь, что ваш редактор файл не сохранить BOM в вашем PHP-файле.
- попробуйте переместить error_reporting / ini_set, чтобы сделать их первыми инструкциями PHP (перед вызовом header ()). Таким образом, вы увидите все ошибки (если таковые имеются). Не забудьте отложить это в производство!
- глупое замечание, но убедитесь, что этот файл интерпретируется как PHP (расширение .php или если нет .htaccess говорит серверу интерпретировать как РНР.)
- все остальное в порядке с вашим кодом. Если он все еще не работает, проверьте журналы сервера. Возможно, что-то еще сбой выполнения этого файла PHP (недопустимый MIME или еще)...
причина в том, что header
функция работает только в том случае, если она вызвана первой!
Если вы ставите echo
раньше тип содержимого автоматически становился text/html
попробуйте распечатать код CSS после заголовка, чтобы проверить, действительно ли он работает.
читать на этой странице дополнительная информация
EDIT: вы изменили свой пост ? :-)
это обычно вызвано фатальной ошибкой (т. е. синтаксической ошибкой), которая заставляет скрипт прерываться до выполнения любого кода (до того, как display_errors может быть установлен через ini_set () во время выполнения). Попробуйте изменить display_errors в файле конфигурации php (php.ini).
это может быть стоит проверить с 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 решает его.