发布于2026-07-21 阅读(0)
扫一扫,手机访问
php://output 是 PHP 中一个只写的数据流。写入这个流的数据,会像 print() 或 echo() 一样直接输出到输出缓冲区。它支持 CLI 模式和 HTTP 模式,两种场景下的用法差异还挺大,下面分别来看。
在命令行下,通过 php://output 直接向终端写入内容,是最直观的用法。
test.php 文件代码:
执行后终端输出:
[root@aiezu.com ~]# php test.php
爱E族
你看,就像在终端里直接打印一样,简单明了。
Web 场景下,php://output 最常见的用途就是动态生成 CSV 文件并直接下载。这里有个坑需要注意:如果用 UTF-8 编码导出 CSV,且文件头没有添加 BOM,Excel 打开时大概率会乱码。
test.php 页面代码:
网页打开效果如下:

关键点:添加 BOM 头(三个字节:0xEF 0xBB 0xBF),否则 Excel 用户会一头雾水。
与 php://output 相反,php://input 是一个只读的数据流。它允许读取 HTTP 客户端以 POST 方式提交、且请求头 Content-Type 值不是 multipart/form-data 的所有原始数据。通常用来接收那些“未被 PHP 自动处理”的剩余数据,比如 XML、JSON 或二进制文件。
这是最常见的使用场景:客户端以 application/xml 格式 POST 数据,服务端通过 php://input 获取原始 XML 字符串,然后解析。
test.php 页面代码:
$value) {
$data[$key] = !is_string($value) ? xmlToArray($value) : $value;
}
return $data;
}
if ( strtolower($_SERVER['CONTENT_TYPE']) == 'application/xml' && $content = file_get_contents("php://input") ) {
$xml = simplexml_load_string($content);
print_r(xmlToArray($xml));
}
待提交的 xml.xml 文件内容:
爱E族
aiezu.com
天猫
tmall.com
通过 Linux curl 命令提交:
[root@aiezu.com ~]# curl -H "Content-Type: application/xml" --data-binary @xml.xml http://aiezu.com/test.php
Array
(
[site] => Array
(
[0] => Array
(
[name] => 爱E族
[domain] => aiezu.com
)
[1] => Array
(
[name] => 天猫
[domain] => tmall.com
)
)
)
代码很清晰:先用 file_get_contents('php://input') 拿到原始 XML 字符串,再用 simplexml_load_string 解析,最后递归转成数组。实际项目中,直接 simplexml_load_string 后再处理就够用了,转数组只是方便调试。
接收 JSON 数据的思路和 XML 几乎一样,这里不再重复贴代码。在 Linux curl 命令 get/post 提交数据、json 和文件全攻略 页面中有详细的实例,感兴趣可以对照着看。核心就是:file_get_contents('php://input') 拿到原始 JSON 字符串,然后 json_decode 解析。
php://input 也可以用来接收二进制文件,比如图片。下面演示如何接收一个 PNG 文件并保存到本地。注意:这只是一个演示,实际生产环境中,文件上传还是建议用 multipart/form-data 表单方式,更可靠。
接收页面 test.php 代码:
提交测试:
[root@aiezu.com ~]# curl -H "Content-Type: image/png" --data-binary @logo.png http://aiezu.com/test.php
文件大小: 3706
修改时间: 2016-12-05 13:29:08
这里用 preg_match 检查 Content-Type 是否为图片类型,然后通过 php://input 读取全部二进制数据,再用 file_put_contents 写入文件。虽然能工作,但缺点也很明显:无法获取文件名、无法处理大文件(php://input 会占用大量内存)。所以还是那句话,常规文件上传用 $_FILES 更合适。
以上就是 php://output 和 php://input 的典型用法,覆盖了 CLI 输出、文件下载、XML/JSON 接收以及二进制文件接收。记住几个关键点:
掌握这些,日常开发中处理数据流就基本够用了。
售后无忧
立即购买>office旗舰店
售后无忧
立即购买>office旗舰店
售后无忧
立即购买>office旗舰店
售后无忧
立即购买>office旗舰店
正版软件
正版软件
正版软件
正版软件
正版软件
1
2
3
7
8