Php header content type error

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

У меня проблемы с файлом PHP, который не работает должным образом. Content-type вообще не получает ни один браузер. Firebug интерпретирует файл как text / html вместо css. Вот файл:

Я попробовал поместить строку с echo ‘TEST’; перед строкой заголовка и ожидал увидеть классическую ошибку «заголовки уже отправлены», но ничего не появляется!

Однако обычные .css-файлы работают как шарм.

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

ОБНОВЛЕНИЕ: Изменил default_mimetype = «text/html» на default_mimetype = «text/css» в php.ini, и все страницы сразу интерпретировались как css, поэтому должен быть способ просто отправить заголовки css для этого файла 🙂

Полный файл по запросу Джона:

ОБНОВЛЕНИЕ №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. Если он не выключен, PHP автоматически выполняет буферизацию вывода за вас. Отключите его и укажите что-нибудь перед командой заголовка, и вы должны увидеть «классическую ошибку».

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

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

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

Если вы поставите echo перед, тип контента автоматически станет text/html

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

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

РЕДАКТИРОВАТЬ: вы изменили свой пост? 🙂

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

Может быть, в вашей конфигурации отключена функция header() ?

print ini_get('disable_functions'); 

Возможно, стоит проверить с помощью curl, какие заголовки фактически отправляются.

Попробуйте это из командной строки и проверьте наличие «text / css»:

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

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

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

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

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

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

Вы можете попробовать Content-Style-Type: 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, стал анально сохраняющим и отказался стилизовать страницу. (Я думаю, что JS все еще работает, но я все равно исправил.)

Решение:

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

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

Источник

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 для этого файла 🙂

Полный файл по требованию Джона:

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»:

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

Если он включен, zlib.output_compression в zlib.output_compression в настройках php.ini или Apache.

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

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

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

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

Вы можете попробовать Content-Style-Type: 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, и я предполагаю, что вы не переустанавливали ОС, поэтому вы можете, возможно, исследовать это / попробуйте, отключив некоторые утилиты / заглушки.

Дикая догадка: откройте файл с чем-то, что будет отображать любую спецификацию . Если вы видите некоторые странные символы перед

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

header('Content-type: text/css'); header("Cache-Control: no-cache, must-revalidate"); header("Expires: Sat, 26 Jul 1997 05:00:00 GMT"); echo 'body '; 

Работает для меня в ящике установки XAMPP и firefox – firebug сообщает правильный тип контента.

Источник

Читайте также:  Python get all imported modules
Оцените статью