10

何らかの理由で、PHP スクリプトを介して robots.txt を提供したいと考えています。robots.txt ファイル要求 (実際にはすべてのファイル要求) が単一の PHP スクリプトになるように、Apache をセットアップしました。

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を参照)。

編集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 になっています。(これは、私のリクエストが実際には内部プロキシを介して提供されるためですが、それは別の問題です)。

ブラウザーが改行を表示しないといういくつかのコメントは、半分だけ正しかった-> content-type が text/plain の場合、最近のブラウザーは正しく改行を表示します。私は、実際の問題に厳密に一致し、上記のわずかに誤解を招くような誤解がない回答を選択しています:)。助けてくれてありがとう!

ありがとう

JP

4

6 に答える 6

27

はい、出力のコンテンツ タイプを次のように設定するのを忘れていましたtext/plain

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

出力はおそらく HTML として送信され、改行はスペースで切り捨てられます。実際に改行を表示するには、<br />タグが必要です。

于 2010-12-22T06:22:27.477 に答える
4
  1. header('Content-Type: text/plain')正しい。
  2. 空白を含む何かが出力に書き込まれる前に、このメソッドを呼び出す必要があります。開始前に空白がないか確認してください<?php
  3. Content-Typeヘッダーが に設定されている場合text/plain、正しい心のブラウザーは空白を折りたたむことはありません。この動作は、HTML および同様の形式に限定されます。
  4. 理由があると思いますが、原則として、PHP を介して静的コンテンツを提供すると、不要なサーバー リソースが使用されます。通常、PHP にヒットするたびに、新しいプロセスが生成され、数メガのメモリが消費されます。apache config ディレクティブを使用して、次のようなヘッダーに基づいてさまざまなロボット ファイルを指すことができますUser-Agent-私はそれを調べています。
  5. 検索エンジンはContent-Typeヘッダーを無視する可能性が高いため、これは問題にはなりません。

お役に立てれば。

-n

于 2010-12-22T08:29:13.707 に答える
1
<?php header("Content-Type: text/plain"); ?>
User-agent: wget
Disallow: /

ところで、改行は問題なくあります。ブラウザに表示されないだけです。ブラウザーは、改行を含むすべての空白を 1 つのスペースにまとめます。

deceze$ curl http://sarcastic-quotes.com/robots.txt
User-agent: wget
Disallow: /
于 2010-12-22T06:24:06.983 に答える
0

私は同様の問題を抱えていて、「\ n」もPHP_EOLも機能しませんでした。私は最終的に使用しました:

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

両方の文字のエコーがうまくいきました。それが誰かを助けることを願っています。

さよならアナキン

于 2015-01-23T20:34:30.833 に答える
0

提供するドキュメントのコンテンツ タイプを設定する必要があります。.txt テキスト ファイルの場合:

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

IANA には、より一般的な MIME (コンテンツ) タイプのいくつかに関する情報があります。

于 2010-12-22T06:22:36.783 に答える
-1

echo を使用している場合は、改行に使用<br>します。printf 関数は \n を使用するものです。

あなたの場合、HTML を使用していないため、printf を使用します。これは、MIME タイプをテキストに設定するとともに、これを行う適切な方法だと思います。

于 2010-12-22T06:23:26.450 に答える