fopen php output,php://input、php://output用法解析

test.php文件:

$output = fopen("php://output", "w");

fwrite($output, "爱E族");

fclose($output);

输出:

[root@aiezu.com ~]# php test.php

爱E族

注意,以UTF8编码导出CSV文件,如果文件头未添加BOM头,使用Excel打开会出现乱码。

test.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上来,除已被处理以外的剩余数据。

1、PHP使用"php://input"接收XML数据:

ttp test.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文件内容:

爱E族

aiezu.com

天猫

tmall.com

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

)

)

)

2、PHP使用"php://input"接收JSON数据:

PHP使用"php://input"接收JSON数据,与接收XML数据十分类似,这里不再做介绍,要查看实例请参考:Linux curl命令get/post提交数据、json和文件全攻略 页面的第“六”节。

3、PHP使用"php://input"接收文件内容:

下面通过代码演示PHP使用"php://input"接收一个png文件,这里只是用于演示,实际运用中还是建议使用Http请求头"Content-Type"值为"multipart/form-data"的表单方式POST。

接收页面"test.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上来

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值