Предоставление простого текста через PHP

По какой-то причине я хочу обслуживать свой robots.txt с помощью PHP-скрипта. У меня настроен apache, так что запрос файла robots.txt (infact all file requests) приходит к одному скрипту PHP.

Код, который я использую для рендеринга robots.txt, это:

echo "User-agent: wget\n"; echo "Disallow: /\n"; 

Однако он не обрабатывает новые строки. Как правильно загрузить файл robots.txt, чтобы поисковые системы (или любой клиент) видели его правильно? Должен ли я отправлять специальные заголовки для txt-файлов?

ИЗМЕНИТЬ 1:

Теперь у меня есть следующий код:

 header("Content-Type: text/plain"); echo "User-agent: wget\n"; echo "Disallow: /\n"; 

который по-прежнему не отображает символы новой строки (см. http://sarcastic-quotes.com/robots.txt ).

EDIT 2:

Некоторые люди отметили, что это просто отлично и не отображаются в браузере. Было просто любопытно, как это выглядит правильно: http://en.wikipedia.org/robots.txt

ИЗМЕНИТЬ 3:

Я загрузил как мою, так и википедию через wget, и вижу следующее:

 $ file en.wikipedia.org/robots.txt en.wikipedia.org/robots.txt: UTF-8 Unicode English text $ file sarcastic-quotes.com/robots.txt sarcastic-quotes.com/robots.txt: ASCII text 

ЗАКЛЮЧИТЕЛЬНОЕ РЕЗЮМЕ:

Основная проблема заключалась в том, что я не настраивал заголовок. Однако есть еще одна внутренняя ошибка, которая создает Content-Type как html. (это потому, что мой запрос фактически обслуживается через внутренний прокси, но это еще одна проблема).

Некоторые комментарии о том, что браузеры не отображают новую строку, были только наполовину правильными -> современные браузеры корректно отображают новую строку, если тип содержимого является текстовым / открытым. Я выбираю ответ, который точно соответствовал реальной проблеме и был лишен вышеупомянутого слегка вводящего в заблуждение заблуждения :). Спасибо всем за помощь и ваше время!

благодаря

JP

Solutions Collecting From Web of "Предоставление простого текста через PHP"

Да, вы забыли установить тип содержимого вашего вывода в text/plain :

 header("Content-Type: text/plain"); 

Ваш вывод, вероятно, отправляется как HTML, где новая строка усечена в пространство и фактически отображает новую строку, вам нужен тег <br /> .

  1. header('Content-Type: text/plain') правильный.
  2. Вы должны вызвать этот метод до того, как все будет записано на ваш вывод, включая пробел. Проверьте пробелы перед открытием <?php .
  3. Если ваш заголовок Content-Type был установлен в text/plain , ни один браузер в своем уме не разрушил бы пробелы. Это поведение исключительно для HTML и подобных форматов.
  4. Я уверен, что у вас есть свои причины, но, как правило, использование статического контента через PHP использует ненужные серверные ресурсы. Каждое попадание в PHP, как правило, представляет собой новый процесс и несколько мегабайт памяти. Вы можете использовать директивы конфигурации apache, чтобы указывать на разные файлы роботов на основе заголовков, таких как User-Agent – я бы это изучил.
  5. Вероятно, поисковые системы игнорируют заголовок Content-Type , поэтому в любом случае это не должно быть проблемой.

Надеюсь это поможет.

-n

 <?php header("Content-Type: text/plain"); ?> User-agent: wget Disallow: / 

Кстати, новые строки там просто прекрасные. Они просто не отображаются в браузере . Браузеры сворачивают все пробелы, включая новые строки, в одно пространство.

 deceze$ curl http://sarcastic-quotes.com/robots.txt User-agent: wget Disallow: / 

Вы должны установить тип содержимого документа, который вы обслуживаете. В текстовом файле .txt:

 header("Content-Type: text/plain"); 

IANA имеет информацию о некоторых наиболее популярных типах MIME (контент) .

У меня была аналогичная проблема, и работал либо «\ n», либо PHP_EOL. Я, наконец, использовал:

 header('Content-Disposition: attachment; filename="plaintext.txt"'); header("Content-Type: text/plain"); echo "some data"; echo chr(13).chr(10); 

Эхо BOTH персонажей получило трюк. Надеюсь, это поможет кому-то.

Bye anankin

Если вы используете эхо, используйте для новых строк. функция printf использует \ n.

В вашем случае используйте printf, потому что вы не используете HTML. Я считаю, что это правильный способ сделать это, а также настроить тип MIME на текст.