0

I have this php page that gets values from a database. From another script on another server, I make a http request to that page and grab the result. The result must be a clean TXT, something like a phrase for example, or a number, or whatever.

When I debug the results I get I see something like this (suppose the answer I was expecting was +OK:server ready+):

+OK:server ready+
1.1 200 OK

I am getting this extra line.

If I make a direct request using a browser, I see +OK:server ready+ but when I look at the page source of that result page I see this:

<html>
<head>
  <style type="text/css"></styles>
</head>
<body>
  <pre style="word-wrap: break-word; white-space: pre-wrap;">+OK:server ready+</pre>
</body>
</html>

Apparently the browser is adding this, right?

Anyway, the code that generates the line I want is this:

header('Content-Type: text/plain');
echo("+" . $resultFromServer . "+");

is this the correct way to send out a clean text, without any formatting, tag, whatever, from PHP?

thanks.

4

3 に答える 3

3

PHP によって出力のに余分な行が追加されるのを見たことがありません。確認することをお勧めします:

  • PHPファイルはWebサーバーで実行されると想定しています。これは、デバッグ時に何らかのツールを使用して HTTP で結果を取得していることを意味します。このツールは、追加の行を追加するものだと思います。コマンドライン ツールcurlを使用して、クリーンな出力を取得します。また、サーバーが送信するものも正確に表示されます。追加された HTML は、おそらく表示目的で Chrome によって追加されたものです。

  • それを生成できる何かのコード (たとえば、目的の出力を生成する echo の直後に exit/die ステートメントを追加することによって)。また、一時的に追加のエコーを追加して、古いデバッグ出力を含む古いファイルを実行していないことを確認します。

ブラウザが表示する (HTML でラップされた) 応答には不要な行が表示されないため、HTTP フェッチ ツールがそれを追加していると確信しています。

于 2013-01-29T14:40:16.000 に答える
1

ここに以前の記事がありました。重要な点: header() コメントは、ファイル内の最初のものでなければなりません - 空白や何もありません。

私は自分自身のためにテストケースを作成しました:

<?php header("Content-Type: text/plain");
echo "hello world\n";
?>

動作します - 出力として「純粋なテキスト」を生成します。

興味があれば、そのファイルはhttp://www.floris.us/SO/SO1.phpにあります。

ソースコードを表示するとき、どのようにブラウザーに到着しますか?

于 2013-01-29T14:45:02.160 に答える
1

ヘッダーにエンコーディングがありません:

header('Content-type: text/plain; charset=utf-8');

ただし、ASCII 文字のみを送信する限り、それがなくても問題なく動作するはずです。

ブラウザーは html コードを追加すべきではありませんが、非標準出力を台無しにする PHP フレームワークをいくつか見てきました。アプリケーションに余分な出力処理があるかどうかを確認してください。しかし、PHP スクリプトにその 2 行しかない場合は、機能するはずです。

ところで、echo は関数ではなく、複数の引数を受け入れるため、ドット演算子で文字列を連結する必要はありませんecho 'a', $b, 'c';。はるかに高速です。

于 2013-01-29T14:30:40.227 に答える