php 输入输出流详解及示例代码
最近在学习http协议!为了更好理解http协议,看了一下nodejs的http的模块!感觉收获还是挺多的。比如我用http的request发一个请求:
var options = { host: 'localhost', port: 80, path: '/backbone/data.php', method: 'post' }; var req = http.request(options, function(res) { console.log('status: ' + res.statuscode); console.log('headers: ' + json.stringify(res.headers)); res.setencoding('utf8'); res.on('data', function (chunk) { console.log('body: ' + chunk); }); }); // write data to request body req.end('name=liuzhang&age=28');
上述代码的意思是发送数据'name=liuzhang&age=28',回调是响应的对象,把服务器响应的数据打印出来!
data.php 代码是
print_r($_post);
打印传过来的数据!
在命令行运行的结果是
可以看到array是空,就是$_post 没有数据,一开始我以为是数据没有传过来!但是我把后端data.php 改成
echo file_get_contents("php://input");
接收到了传过来的数据!
php://input 是个可以访问请求的原始数据的只读流。 post 请求的情况下,最好使用 php://input 来代替 $http_raw_post_data,因为它不依赖于特定的 php.ini 指令。 而且,这样的情况下 $http_raw_post_data 默认没有填充, 比激活 always_populate_raw_post_data 潜在需要更少的内存。 enctype="multipart/form-data" 的时候 php://input 是无效的。
$_post仅当数据按 application/x-www-form-urlencoded 类型提交时才能得到,form的enctype属性为编码方式,常用有两种:application/x-www-form-urlencoded和multipart/form-data,默认为application/x-www-form-urlencoded。 当action为get时候,浏览器用x-www-form-urlencoded的编码方式把form数据转换成一个字串(name1=value1&name2=value2...),然后把这个字串append到url后面,用?分割,加载这个新的url。 当action为post时候,浏览器把form数据封装到http body中,然后发送到server。
当我们把发送options改成
var options = { host: 'localhost', port: 80, path: '/backbone/data.php', method: 'post', headers : {'content-type': 'application/x-www-form-urlencoded'} };
加上一个headers content-type 就可以用$_post 接收到数据! 如果不是这种的form类型,你就可以用原始的输入接收数据!
以上就是对php 输入输出流做的资料整理,后续继续补充相关资料,谢谢大家对本站的支持!
上一篇: php 的反射详解及示例代码