index.html

 
  
  1. <form action="action.php" method="post" > 
  2.   <input type="text" name="userName"  id="userName" /><br/> 
  3.   <input type="text" name="userPass"  id="userPass" /><br/> 
  4.   <input type="submit" value="ok" /> 
  5. </form> 

 

action.php

 
  
  1. <?php 
  2.     $raw_post_data = file_get_contents('php://input''r'); 
  3.     echo "-------\$_POST------------------<br/>"
  4.     echo var_dump($_POST) . "<br/>"
  5.     echo "-------php://input-------------<br/>"
  6.     echo $raw_post_data . "<br/>"
  7. ?>  

 

 

 

理解:

1.符号的理解:与符号”http://“对比。可以理解php://表示这是一种协议。不同的是它是php自己定义与使用的协议。

输入域名的时候,htt://后面输入的是域的名字。那么php://后面的"input"也可以表示一个文件。是一个php已经定义好的文件。比如有ouput。php自己知道去×××这个文件。


2.相关联知识: 常量$HTTP_RAW_POST_DATA是获取post提交的原始数据(contains the raw POST data)。php://input 的所完成的功能与它一样:都是包含post过来的原始数据。

使用php://input比$HTTP_RAW_POST_DATA更好。因为:使用php://inpu不受到配置文件的影响。常量$HTTP_RAW_POST_DATA受到php.ini配置的影响。在php.ini中有个选项,always_populate_raw_post_data = On。该配置决定是否生成常量$HTTP_RAW_POST_DATA(保存post数据)。

php://input的方式与$HTTP_RAW_POST_DATA数据都同样不适用于表单提交的"multipart/form-data"类型的数据。所以,两种的区别就是在于是否受到配置文件的影响。另外,内存消耗更少,这个怎么理解?


3.怎么得到其内容:使用file_get_contents('php://input')得到输入流的内容。php://input的结果只读。

 

4.使用规则:必须是post方式提交的数据。而且提交的不能是multipart/form-data类型的数据(当需要上传文件,就会在form标签中添加属性enctype="multipart/form-data")