Intereting Posts

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-файлы работают как шарм.

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

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 автоматически выполняет буферизацию вывода для вас. Установите это, чтобы отключить и что-то повторить перед командой заголовка, и вы должны увидеть «классическую ошибку».

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

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

причина в том, что функция 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 сообщает правильный тип контента.