php://output是php语言中一个只写的数据流,向“php://input”写入的数据将像 print() 和 echo() 同样的方式 写入到输出缓冲区;“php://output”支持CLI(command-line interface,命令行界面)模式和Http模式;php
1 、CLI模式经过php://output向终端输出内容:linux
test.php文件:json
<?php $output = fopen("php://output", "w"); fwrite($output, "爱E族"); fclose($output);
输出:数组
[root@aiezu.com ~]# php test.php 爱E族
二、Http模式经过php://output导出csv文件:网络
注意,以UTF8编码导出CSV文件,若是文件头未添加BOM头,使用Excel打开会出现乱码。app
test.php页面代码:dom
<?php header('Content-Type: application/csv'); header('Content-Disposition: attachment; filename="test.csv"'); $output = fopen('php://output','w') or die("Can't open php://output"); //UTF8 csv文件头前需添加BOM,否则会是乱码 fwrite($output, chr(0xEF).chr(0xBB).chr(0xBF)); // 输出标题行 fputcsv($output, array('站点名', '域名', '行业')); //数据内容 $rows = array( array('天猫', 'http://tmall.com', '电子商务') ,array('爱E族', 'http://aiezu.com', '互联网技术') ,array('腾讯', 'http://qq.com', '社交网络') ); foreach($rows as $row) { fputcsv($output, $row); } fclose($output) or die("Can't close php://output");
php://input是php语言中一个只读的数据流;经过"php://input",能够读取从Http客户端以POST方式提交、请求头“Content-Type”值非"multipart/form-data"的全部数据;"php://input"通常用来读取POST上来,除已被处理之外的剩余数据。 curl
一、PHP使用"php://input"接收XML数据:post
ttp test.php页面代码:测试
<?php /** * xml文档转为数组元素 * @param obj $xmlobject XML文档对象 * @return array */ function xmlToArray($xmlobject) { $data = array(); foreach ((array)$xmlobject as $key => $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);//转换post数据为simplexml对象 print_r(xmlToArray($xml)); }
待提交xml.xml文件内容:
<?xml version='1.0' encoding='UTF-8'?> <root> <site> <name>爱E族</name> <domain>aiezu.com</domain> </site> <site> <name>天猫</name> <domain>tmall.com</domain> </site> </root>
经过linux curl命令提交xml.xml:
[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 ) ) )
二、PHP使用"php://input"接收JSON数据:
PHP使用"php://input"接收JSON数据,与接收XML数据十分相似,这里再也不作介绍,要查看实例请参考:Linux curl命令get/post提交数据、json和文件全攻略 页面的第“六”节。
三、PHP使用"php://input"接收文件内容:
下面经过代码演示PHP使用"php://input"接收一个png文件,这里只是用于演示,实际运用中仍是建议使用Http请求头"Content-Type"值为"multipart/form-data"的表单方式POST。
接收页面"test.php"代码:
<?php if ( preg_match("#^image/(png|jpe?g|gif)$#i", $_SERVER['CONTENT_TYPE'], $match) && $binary = file_get_contents("php://input") ) { $file = sprintf("/tmp/pic.%s", strtolower($match[1])); file_put_contents($file, $binary); echo sprintf("文件大小: %s\n", filesize($file)); echo sprintf("修改时间: %s\n", date("Y-m-d H:i:s", filemtime($file))); }
提交测试:
[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
"php://input"通常用来读取POST上来