0

我有这个从数据库中获取值的 php 页面。从另一台服务器上的另一个脚本,我向该页面发出 http 请求并获取结果。结果必须是一个干净的 TXT,例如一个短语、一个数字或其他任何东西。

当我调试得到的结果时,我看到了类似这样的内容(假设我期望的答案是 +OK:server ready+):

+OK:server ready+
1.1 200 OK

我得到了这条额外的线。

如果我使用浏览器发出直接请求,我会看到 +OK:server ready+ 但是当我查看该结果页面的页面源时,我会看到:

<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>

显然浏览器正在添加这个,对吧?

无论如何,生成我想要的行的代码是这样的:

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

这是从 PHP 发送干净文本的正确方法,没有任何格式、标签等?

谢谢。

4

3 回答 3

3

我从未见过PHP 在输出下方添加了额外的行。我建议你检查:

  • 我假设 PHP 文件在 Web 服务器上运行。这意味着在调试时,您可能正在使用某些工具通过 HTTP 获取结果。我认为这个工具是增加附加线的原因。使用命令行工具curl获得干净的输出。这也将准确显示服务器发送的内容。添加的 HTML 可能是 Chrome 出于显示目的而添加的。

  • 您的代码可以生成它(例如,通过在生成所需输出的回显之后添加退出/死亡语句)。还要在此处临时添加一个额外的回显,以确保您没有执行包含旧调试输出的过时文件。

由于不需要的行没有出现在浏览器显示的(HTML 包装的)响应中,我很确定您的 HTTP 获取工具正在添加它。

于 2013-01-29T14:40:16.000 回答
1

标头中缺少编码:

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

但只要您只发送 ASCII 字符,它应该可以正常工作。

浏览器不应该添加任何 html 代码,但我看到一些 PHP 框架搞砸了非标准输出。检查您的应用程序中是否有任何额外的输出处理。但是,如果您的 PHP 脚本中只有那两行,那么它一定可以工作。

顺便说一句,echo 不是一个函数,它接受多个参数,所以你不必用点运算符连接字符串——echo 'a', $b, 'c';速度要快得多。

于 2013-01-29T14:30:40.227 回答
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 回答