PHP输入流php://input实例讲解

对于php://input介绍,PHP官方手册文档有一段话对它进行了很明确地概述。
“php://input allows you to read raw POST data. It is a less memory intensive alternative to$HTTP_RAW_POST_DATA and does not need any special php.ini directives. php://input is not available with enctype=”multipart/form-data”.

翻译过来,是这样:
“php://input可以读取没有处理过的POST数据。相较于$HTTP_RAW_POST_DATA而言,它给内存带来的压力较小,并且不需要特 殊的php.ini设置。php://input不能用于enctype=multipart/form-data”
总结如下:

  • 1)、Coentent-Type仅在取值为application/x-www-data-urlencoded和multipart/form-data两种情况下,PHP才会将http请求数据包中相应的数据填入全局变量$_POST
  • 2)、PHP不能识别的Content-Type类型的时候,会将http请求包中相应的数据填入变量$HTTP_RAW_POST_DATA
  • 3)、只有Coentent-Type为multipart/form-data的时候,PHP不会将http请求数据包中的相应数据填入php://input,否则其它情况都会。填入的长度,由Coentent-Length指定。
  • 4)、只有Content-Type为application/x-www-data-urlencoded时,php://input数据才跟$_POST数据相一致。
  • 5)、php://input数据总是跟$HTTP_RAW_POST_DATA相同,但是php://input比$HTTP_RAW_POST_DATA更凑效,且不需要特殊设置php.ini
  • 6)、PHP会将PATH字段的query_path部分,填入全局变量$_GET。通常情况下,GET方法提交的http请求,body为空。

总结起来就是,在用$_POST获取不到由APP或者一些接口的回调数据时,就用php://input试试

1、 接受xml数据

//发送xml数据
$xml = '<xml>xmldata</xml>';//要发送的xml
$url = 'http://localhost/test/getXML.php';//接收XML地址
$header = 'Content-type: text/xml';//定义content-type为xml
$ch = curl_init(); //初始化curl
curl_setopt($ch, CURLOPT_URL, $url);//设置链接
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);//设置是否返回信息
curl_setopt($ch, CURLOPT_HTTPHEADER, $header);//设置HTTP头
curl_setopt($ch, CURLOPT_POST, 1);//设置为POST方式
curl_setopt($ch, CURLOPT_POSTFIELDS, $xml);//POST数据
$response = curl_exec($ch);//接收返回信息
if(curl_errno($ch)){//出错则显示错误信息
print curl_error($ch);
}
curl_close($ch); //关闭curl链接
echo $response;//显示返回信息 

// php用file_get_contents("php://input")或者$HTTP_RAW_POST_DATA可以接收xml数据
$xmldata = file_get_contents("php://input");
$data = (array)simplexml_load_string($xmldata);

2、手机上传图片到服务器的小程序
发送

//@file phpinput_post.php
$data=file_get_contents('btn.png');
$http_entity_body = $data;
$http_entity_type = 'application/x-www-form-urlencoded';
$http_entity_length = strlen($http_entity_body);
$host = '127.0.0.1';
$port = 80;
$path = '/image.php';
$fp = fsockopen($host, $port, $error_no, $error_desc, 30);
if ($fp){
fputs($fp, "POST {$path} HTTP/1.1\r\n");
fputs($fp, "Host: {$host}\r\n");
fputs($fp, "Content-Type: {$http_entity_type}\r\n");
fputs($fp, "Content-Length: {$http_entity_length}\r\n");
fputs($fp, "Connection: close\r\n\r\n");
fputs($fp, $http_entity_body . "\r\n\r\n"); 

while (!feof($fp)) {
 $d .= fgets($fp, 4096);
}
fclose($fp);
echo $d;
}

接收

/**
 *Recieve image data
 **/
error_reporting(E_ALL);

function get_contents() {
 $xmlstr= file_get_contents("php://input");
 $filename=file_put_contentsxmltime().'.png';
 if(($filename,$str)){
 echo 'success';
 }else{
 echo 'failed';
 }
  }
get_contents();

3:获取HTTP请求原文

/**
 * 获取HTTP请求原文
 * @return string
 */
function get_http_raw(){
 $raw = '';
 // (1) 请求行
 $raw .= $_SERVER['REQUEST_METHOD'] . ' ' . $_SERVER['REQUEST_URI'] . ' ' . $_SERVER['SERVER_PROTOCOL'] . "\r\n";
 // (2) 请求Headers
 foreach ($_SERVER as $key => $value) {
 if (substr($key , 0 , 5) === 'HTTP_') {
  $key = substr($key , 5);
  $key = str_replace('_' , '-' , $key);
  $raw .= $key . ': ' . $value . "\r\n";
 }
 }
 // (3) 空行
 $raw .= "\r\n";
 // (4) 请求Body
 $raw .= file_get_contents('php://input');
 return $raw;
}

以上就是针对PHP输入流举的三个小栗子,目的在于帮助大家更准确的理解PHP输入流,希望大家有所收获。

(0)

相关推荐

  • PHP中explode函数和split函数的区别小结

    一.前言 之所以做这个,是因为这两个函数的作用很像,都是把字符串转换成数组. 二.explode 从下面的例子可以看出,生成的数组是有对应的顺序的. $pizza = "piece1 piece2 piece3 piece4 piece5 piece6"; $pieces = explode(" ", $pizza); echo $pieces[0]; // piece1 echo $pieces[1]; // piece2 // 示例 2 $data = &quo

  • php输入流php://input使用示例(php发送图片流到服务器)

    从官网信息来看,php://input是一个只读信息流,当请求方式是post的,并且enctype不等于"multipart/form-data"时,可以使用php://input来获取原始请求的数据. 看一个简单的例子. 客户端就是一个表单,非常简单. 复制代码 代码如下: <form action="" method="POST">    name: <input type="text" name=&qu

  • php输入流php://input使用浅析

    在做一个摄像头拍照然后上传的功能,php中使用php://input来获取内容.于是就了解了下php://input. 从官网信息来看,php://input是一个只读信息流,当请求方式是post的,并且enctype不等于"multipart/form-data"时,可以使用php://input来获取原始请求的数据. 看一个简单的例子. 客户端就是一个表单,非常简单. 复制代码 代码如下: <form action="" method="POST

  • php处理单文件、多文件上传代码分享

    php处理  单文件.多文件上传实例代码,供大家参考,具体内容如下 后台处理文件submit_form_process.php <?php /****************************************************************************** 参数说明: $max_file_size : 上传文件大小限制, 单位BYTE $destination_folder : 上传文件路径 $watermark : 是否附加水印(1为加水印,其他为不加

  • PHP sleep()函数, usleep()函数

    PHP sleep() 函数 定义和用法 sleep() 函数延迟代码执行若干秒. 语法sleep(seconds) seconds 必需.以秒计的暂停时间. 返回值 若成功,返回 0,否则返回 false. 错误/异常 如果指定的描述 seconds 是负数,该函数将生成一个 E_WARNING. 例子 <?php echo date('h:i:s') . "<br />"; //暂停 10 秒 sleep(10);//重新开始 echo date('h:i:s')

  • PHP中利用sleep函数实现定时执行功能实现代码

    在一些竞猜的网站中,如果我们需要做一个定时执行的功能,比如有一道题,在十秒之内要完成,否则显示"您已超时",如果完成,则跳转到下一道题上面,而这中间有一个十秒的停顿,这样的功能是怎样实现的呢? 在PHP中,有一个sleep函数,大概意思是程序执行遇到sleep函数时暂停N秒后继续往下执行.如sleep(10)意思就是程序自上往下执行,遇到sleep(10)语句后暂停十秒,然后继续往下执行.函数括号内的参数是一个数值,代表暂停时间值,单位秒.请看下面一段代码: <?php // c

  • PHP输入流php://input介绍

    对一php://input介绍,PHP官方手册文档有一段话对它进行了很明确地概述. "php://input allows you to read raw POST data. It is a less memory intensive alternative to $HTTP_RAW_POST_DATA and does not need any special php.ini directives. php://input is not available with enctype=&quo

  • 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.statu

  • PHP页面间传递值和保持值的方法

    一.目录结构 二.两次页面间传递值 在两次页面之间传递少量数据,可以使用get提交,也可以使用post提交,二者的区别恕不赘述. 1.get提交 使用get提交来传递数据,在链接地址中修改发送到服务器的 URL 如下所示http://www.cnblogs.com/MarkRao/p/php01.html?gName=mark&gAge=26,当然也可以在表单中设置method="get",php中接收get提交过来的数据值,使用预定义$_GET变量 从带有 GET 方法的表单

  • PHP输入流php://input实例讲解

    对于php://input介绍,PHP官方手册文档有一段话对它进行了很明确地概述. "php://input allows you to read raw POST data. It is a less memory intensive alternative to$HTTP_RAW_POST_DATA and does not need any special php.ini directives. php://input is not available with enctype="

  • 基于input框覆盖掉数字英文的实例讲解

    例子1: <input type="text" value="0" onkeyup="cleartwoNum(this)"> //限制input框输入只能数字: function cleartwoNum(obj) { obj.value = obj.value.replace(/[^\d]/g, ''); } 例子2:可以输入金额 <input type="text" value="0"

  • vuejs 动态添加input框的实例讲解

    实例如下: <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> <c:set var="front" val

  • js与jquery获取input输入框中的值实例讲解

    如何用javascript获取input输入框中的值,js/jq通过name.id.class获取input输入框中的value 先准备一段 HTML <input type="text" name"username" id="user" placeholder="用户名" class="uusr"><br> 一.jquery获取input文本框中的值 通过 name: $('inp

  • JavaWeb文件上传下载实例讲解(酷炫的文件上传技术)

    一.课程概述 在Web应用系统开发中,文件上传功能是非常常用的功能,今天来主要讲讲JavaWeb中的文件上传功能的相关技术实现,并且随着互联网技术的飞速发展,用户对网站的体验要求越来越高,在文件上传功能的技术上也出现许多创新点,例如异步上传文件,拖拽式上传,黏贴上传,上传进度监控,文件缩略图,大文件断点续传,大文件秒传等等. 本课程需要的基础知识: 了解基本的Http协议内容 基本IO流操作技术 Servlet基础知识 javascript/jQuery技术基础知识 二.文件上传的基础 对于文件

  • 浅谈java的TCP和UDP编程(附实例讲解)

    TCP 客户端: import java.io.BufferedReader; import java.io.InputStreamReader; import java.io.PrintWriter; import java.net.Socket; public class MyClient { public static void main(String[] args) throws Exception{ Socket socket = null; BufferedReader in = n

  • jq源码解析之绑在$,jQuery上面的方法(实例讲解)

    1.当我们用$符号直接调用的方法.在jQuery内部是如何封装的呢?有没有好奇心? // jQuery.extend 的方法 是绑定在 $ 上面的. jQuery.extend( { //expando 用于决定当前页面的唯一性. /\D/ 非数字.其实就是去掉小数点. expando: "jQuery" + ( version + Math.random() ).replace( /\D/g, "" ), // Assume jQuery is ready wit

  • jquery之基本选择器practice(实例讲解)

    一.在输入框中输入数字,点击按钮,实现对应事件的功能. html代码: <input id="txt1" type="text" value="2" /> <input id="Button5" type="button" value="改变大于N的行背景为绿色" /> jQuery代码: //改变大于N的行背景为绿色 $("#Button5"

  • 原生javascript实现文件异步上传的实例讲解

    效果图: 代码:(demo33.jsp) <%@ page contentType="text/html;charset=UTF-8" language="java" %> <html> <head> <title>demo33.jsp</title> </head> <body> <label for="text">名称</label>

  • 原生js的ajax和解决跨域的jsonp(实例讲解)

    最近慢慢感觉,学再多框架,库,都不如老老实实先把基础弄扎实了. 不说废话,先上一个用ajax请求下本地的一个.txt文件 <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> <script> window.onload =function(){ var oBtn = d

随机推荐