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 模型中使用?