У меня есть некоторые проблемы с файлом 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-файлы работают как шарм.
Что я могу сделать, чтобы разобраться в этом?
UPDATE: изменилось ли default_mimetype = "text/html"
на default_mimetype = "text/css"
в php.ini, и все страницы сразу получили интерпретацию как css, поэтому должен быть способ просто отправить заголовки css для этого файла 🙂
Полный файл по требованию Джона:
<?php header('Content-Type: text/css; charset=UTF-8'); echo 'body {background-color: #000000; }'; ?>
UPDATE # 2: добавление ini_set('default_mimetype', 'text/css');
в файл PHP исправляется этот файл, но он не решает проблему, которая вызывает эту ошибку …
UPDATE # 3: Протестировано, добавив AddType text/css .css
в конфигурацию .htaccess и Apache. Еще не повезло. Также тестируется для отправки заголовков, отделенных от заголовка charset: header('Content-Type: text/css');
– Еще не повезло …
ОБНОВЛЕНИЕ # 4: переустановили Apache + PHP на сервере, чтобы узнать, не исчезла ли проблема, но нет. Тот же старый, такой же старый …
Проверьте файл php.ini для параметра output_buffering. Если он не установлен «выключен», то PHP автоматически выполняет буферизацию вывода для вас. Установите это, чтобы отключить и что-то повторить перед командой заголовка, и вы должны увидеть «классическую ошибку».
Вы не должны использовать закрытие?>. Я знаю, что это противоречивое предложение, но слишком много раз люди добавляют обратно и / или пространство после него, которое выводится в браузер (перед заголовком). Очень мало случаев, когда он не использует его, может вызвать проблему.
причина в том, что функция header
работает только в том случае, если это первый вызов!
Если вы помещаете echo
раньше, тип контента автоматически становится text/html
попробуйте напечатать код CSS после заголовка, чтобы проверить, действительно ли он работает.
Прочтите эту страницу для получения дополнительной информации
EDIT: вы изменили свой пост? 🙂
Это обычно вызвано фатальной ошибкой (т. Е. Синтаксической ошибкой), которая заставляет сценарий прерываться до того, как какой-либо из кода будет выполнен (до того, как display_errors можно установить через ini_set () во время выполнения). Попробуйте изменить display_errors в файле конфигурации php (php.ini).
Может быть, функция header()
отключена в вашей конфигурации?
Контрольная работа:
print ini_get('disable_functions');
Возможно, стоит проверить с завиткой, чтобы увидеть, какие заголовки отправляются.
Попробуйте это из командной строки и проверьте «text / css»:
curl -I http://example.com
В зависимости от заголовков запросов браузера PHP также может отправлять выходные данные с помощью буферизации вывода. В файле PHP попробуйте это проверить для ob_gzhandler
.
print_r(ob_list_handlers());
Если он включен, zlib.output_compression
в 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. Вышеуказанная декларация 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 стал анально-retentive и отказался стилизовать страницу. (Я думаю, что JS все еще работал, но я все равно исправил его.)
Решение:
header ('Content-type: text / css'); и заголовок ('Content-type: application / javascript');
Редактировать 3 Было сообщение о некоторых формах, не отправляющих какие-либо данные из-за утилиты с именем AVG Linkscanner. Поскольку вы переустановили Apache + php, и я предполагаю, что вы не переустанавливали ОС, поэтому вы можете, возможно, исследовать это / попробуйте, отключив некоторые утилиты / заглушки.
Дикая догадка: откройте файл с чем-то, что будет отображать любую спецификацию . Если вы видите некоторые странные символы перед <?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 сообщает правильный тип контента.