PHP - 从请求中生成干净的 TXT 输出

Posted

技术标签:

【中文标题】PHP - 从请求中生成干净的 TXT 输出【英文标题】:PHP - generating a clean TXT output from a request 【发布时间】:2013-01-29 14:20:01 【问题描述】:

我有这个从数据库中获取值的 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 发送干净文本的正确方法吗?没有任何格式、标签等?

谢谢。

【问题讨论】:

请构建一个测试用例。 你能说得更具体点吗? 第二行是 HTTP 响应:版本 1.1,错误代码 200(“请求已完成”) - 简写为“OK” 好的,我知道。当我所做的只是从服务器创建一个普通的 txt 时,我问这是否是一个正常的字符串。我也在问这是否是打印干净 txt 的正确方法。 我现在明白这个问题了。您希望响应是一行文本,而不是一个完整的 html 文件,它会被浏览器呈现为格式良好的 html 文档中的一行文本。 【参考方案1】:

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

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

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

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

【讨论】:

【参考方案2】:

您的标头中缺少编码:

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

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

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

顺便说一句,echo 不是函数,它接受多个参数,因此您不必使用点运算符连接字符串 - echo 'a', $b, 'c'; 更快。

【讨论】:

嘿@Josef,欢迎来到 SO。只是让您知道,这里有一个禁止宣誓的政策 - meta.stackexchange.com/questions/22232/…。【参考方案3】:

之前有一篇文章here。重要的一点是:header() 注释必须是文件中最重要的东西 - 没有空格,什么都没有。

我刚刚为自己做了一个测试用例:

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

有效 - 它生成“纯文本”作为输出。

如果您有兴趣 - 该文件位于 http://www.floris.us/SO/SO1.php

它是如何到达您的浏览器的(当您查看源代码时)?

【讨论】:

以上是关于PHP - 从请求中生成干净的 TXT 输出的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Keras 中生成 class_labels.txt 以在 CoreML 模型中使用?

Hive UDF 从列表中生成所有可能的有序组合

从给定的单词列表中生成具有“N”长度的所有可能组合(寻找不重复)

如何在 Openssl 中生成十六进制输出?

在 Oracle 的同一个假脱机中生成输出

在 Tensorflow 中生成特殊输出词后如何停止 RNN?