Тип контента, не работающий в PHP

У меня есть некоторые проблемы с файлом PHP, который не работает правильно. Тип контента не становится полученным никаким браузером вообще. Firebug интерпретирует файл как текст/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" кому: default_mimetype = "text/css" в php.ini и всех страницах был сразу интерпретирован как CSS, таким образом, существует, должен быть способ просто отправить заголовки CSS за этим файлом :)

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

9
задан Industrial 29 March 2010 в 18:30
поделиться

12 ответов

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

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

8
ответ дан 4 December 2019 в 11:41
поделиться

Вы можете попробовать 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 все еще работает, но я все равно исправил его .)

Решение:

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

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

0
ответ дан 4 December 2019 в 11:41
поделиться

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

0
ответ дан 4 December 2019 в 11:41
поделиться

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

0
ответ дан 4 December 2019 в 11:41
поделиться

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

1
ответ дан 4 December 2019 в 11:41
поделиться

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

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

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

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

РЕДАКТИРОВАТЬ: вы меняли свое сообщение? : -)

2
ответ дан 4 December 2019 в 11:41
поделиться

Безумная догадка: откройте файл с помощью чего-нибудь, что отобразит любую спецификацию . Если перед вы видите какие-то странные символы, у вас проблема. Проверьте текущие параметры редактора, чтобы сохранить файл UTF-8 и сохранить их без спецификации.

0
ответ дан 4 December 2019 в 11:41
поделиться

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

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

curl -I http://example.com

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

print_r(ob_list_handlers());

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

1
ответ дан 4 December 2019 в 11:41
поделиться

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

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

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

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

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

Попробуйте следующее:

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 сообщает о правильном типе содержимого.

0
ответ дан 4 December 2019 в 11:41
поделиться

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

Тест:

print ini_get('disable_functions');
1
ответ дан 4 December 2019 в 11:41
поделиться
Другие вопросы по тегам:

Похожие вопросы: