• Php 笔记2-----手机端 与 php服务器的通信


    对于 手机端 和 php服务器的通信,是不存在表单这一概念的  ,除非自己去实现, 所以通常情况下步骤是:

    假定上传的是字符串

    1  手机端的流程是 把文件或者字符串,转化为 特定的流。

    2 通过http post上传流。

    3 服务器接收到 request   不能使用_Post['']方式 读取流信息, 而是通过 $link = fopen("php://input", 'r');  获取上传的数据。

    PHP code $link = fopen("php://input", 'r');
    打开php的输入流,所有提交到该文件的数据都可用用此获取
    $json = fread($link, 10000);
    读取刚才打开的输入流,最多读取10000字节
    echo $json;
    对于上一节说的,_Post 能够获取post方式 的 数据的基本依据是  Content-Type=application/x-www.form-urlencoded      通过表单上传文件时必须指定编码类型为"multipart/form-data"。
    text/plain是我们在做纯文本传输时防止接收数据时出现编码混乱而设置的。为什么要这么设置?以下三者的区别。
    application/x-www-form-urlencoded 采用键值对应的方式 post,                                                                                                                 
    multipart/form-data  上传文件  需要使用多媒体协议
    http://hi.baidu.com/i3_online/item/77fdbdf08b514325743c4cb7   详细介绍了  3中 编码格式 。
    、。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。
    接下来  是     $HTTP_RAW_POST_DATA和php://input和$_POST接收的区别
    不是基于浏览器表单的情况的时候,post是不提交表单的。所以那一套$_POST是获取不到 表单里面控件的数据的。没有键值对应。同时,编码格式不是enctype="multipart/form-data。
    $HTTP_RAW_POST_DATA是全局变量 $GLOBALS['HTTP_RAW_POST_DATA']   在编码是enctype="multipart/form-data。(表单编码)数据不可用。  这是使用表单上传文件的编码格式,启用多媒体协议,采用二进制流。
    ,基本上$GLOBALS['HTTP_RAW_POST_DATA'] 和 $_POST是一样的。但是如果post过来的数据不是PHP能够识别的,你可以用
    $GLOBALS['HTTP_RAW_POST_DATA']来接收,比如 text/xml 或者 soap 等等。可以说$GLOBALS['HTTP_RAW_POST_DATA']范围更广一些。php不识别的编码和能识别的 他都可以显示 除了form-data
    PHP默认识别的数据类型是application/x-www.form-urlencoded标准的数据类型,也就是基本的 表单提交数据的 编码格式。
     
    对于 text/xml类型  是提交一个xml文档给服务器。要怎么获得这个post数据呢 ? text/xml可是个 php不识别的编码格式啊。
    由于PHP默认只识别application/x-www.form-urlencoded标准的数据类型,因此,对型如text/xml的内容无法解析为$_POST数组,这个时候'HTTP_RAW_POST_DATA'该出场了。故保留原型,交给$GLOBALS['HTTP_RAW_POST_DATA']
    来接收。他返回的应该是一个string,代表xml文件内容。
    当然 最好的方式是使用  php://input 实现这个功能
    php://input 允许读取 POST 的原始数据。和 $HTTP_RAW_POST_DATA 比起来,它给内存带来的压力较小,并且不需要任何特殊的
    php.ini 设置。php://input 不能用于 enctype="multipart/form-data"。
    <form   action="post.php"   method="post">  
          <input  
    type="text"   name="user">  
          <input   type="password"  
    name="password">  
          <input  
    type="submit">  
      </form>   
     post.php  
      ----------------------------  
      <?   echo  
    file_get_contents("php://input");   ?>   首选 file_get_contents 替代 fopen ,file_get_content也可以听用来读取服务器本地文件。  返回值是一个string http://www.lvtao.net/showarticle.php?articleid=1063
     
     
     
     

     

  • 相关阅读:
    附件下载遇到 ERR_RESPONSE_HEADERS_MULTIPLE_CONTENT_DISPOSITION 错误
    Javascript模块编程&jQuery插件开发学习笔记
    网站推荐
    分布式服务下Quartz任务变为EREOR分析及解决
    Quartz任务监听器
    定时任务框架Quartz基本使用
    2020年CKA考试分享
    vue-element-loading 动态插件
    pycharm之常用插件
    PHP开源项目之YOURLS
  • 原文地址:https://www.cnblogs.com/zey23/p/3521218.html
Copyright © 2020-2023  润新知