Рендеринг простого текста через PHP - PullRequest
9 голосов
/ 22 декабря 2010

По какой-то причине я хочу обслуживать свой robots.txt через скрипт PHP.Я настроил apache так, чтобы запрос файла robots.txt (затрагивает все запросы файлов) приходил к одному скрипту PHP.

Код, который я использую для отрисовки файла robots.txt:

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

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

РЕДАКТИРОВАТЬ 1:

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

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

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

РЕДАКТИРОВАТЬ 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

Ответы [ 6 ]

23 голосов
/ 22 декабря 2010

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

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

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

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

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

-п

1 голос
/ 22 декабря 2010
<?php header("Content-Type: text/plain"); ?>
User-agent: wget
Disallow: /

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

deceze$ curl http://sarcastic-quotes.com/robots.txt
User-agent: wget
Disallow: /
0 голосов
/ 23 января 2015

У меня была похожая проблема, и "\ n", ни PHP_EOL работали. Я наконец использовал:

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

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

Bye anankin

0 голосов
/ 22 декабря 2010

Если вы используете echo, тогда используйте <br> для новых строк. функция printf - это то, что использует \ n.

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

0 голосов
/ 22 декабря 2010

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

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

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

...