• file_get_contents("php://input")的使用方法


    转自http://www.kuitao8.com/20140727/2867.shtml

    $data = 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 是无效的。 
        
     
    1, php://input 可以读取http entity body中指定长度的值,由Content-Length指定长度,不管是POST方式或者GET方法提交过来的数据。但是,一般GET方法提交数据 时,http request entity body部分都为空。 
    2,php://input 与$HTTP_RAW_POST_DATA读取的数据是一样的,都只读取Content-Type不为multipart/form-data的数据。
    学习笔记
     1Coentent-Type仅在取值为application/x-www-data-urlencodedmultipart/form-data两种情况下,PHP才会将http请求数据包中相应的数据填入全局变量$_POST 
     2PHP不能识别的Content-Type类型的时候,会将http请求包中相应的数据填入变量$HTTP_RAW_POST_DATA 
     3, 只有Coentent-Typemultipart/form-data的时候,PHP不会将http请求数据包中的相应数据填入php://input,否则其它情况都会。填入的长度,由Coentent-Length指定。 
     4,只有Content-Typeapplication/x-www-data-urlencoded时,php://input数据才跟$_POST数据相一致。 
     5php://input数据总是跟$HTTP_RAW_POST_DATA相同,但是php://input比$HTTP_RAW_POST_DATA更凑效,且不需要特殊设置php.ini 
     6PHP会将PATH字段的query_path部分,填入全局变量$_GET。通常情况下,GET方法提交的http请求,body为空。
     
    例子
     1.phpfile_get_contents("php://input")或者$HTTP_RAW_POST_DATA可以接收xml数据
     比如:
      getXML.php;//接收XML地址
      
    <?php 
         $xmldata = file_get_contents("php://input"); 
         $data = (array)simplexml_load_string($xmldata); 
    ?> 
     
      这里的$data就是包含xml数据的数组,具体php解析xml数据更新详细的方法
      sendXML.php
     
    <?php 
         $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;//显示返回信息 
    ?> 
     
     2.一个手机上传图片到服务器的小程序
      上传文件
       
    <?php 
         //@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
    
    "); 
            fputs($fp, "Host: {$host}
    
    "); 
            fputs($fp, "Content-Type: {$http_entity_type}
    
    "); 
            fputs($fp, "Content-Length: {$http_entity_length}
    
    "); 
            fputs($fp, "Connection: close
    
    
    
    "); 
            fputs($fp, $http_entity_body . "
    
    
    
    "); 
     
            while (!feof($fp)) { 
             $d .= fgets($fp, 4096); 
            } 
            fclose($fp); 
            echo $d; 
         } 
    ?> 
     
      接收文件
      
    <?php 
            /** 
             *Recieve image data 
            **/    
            error_reporting(E_ALL); 
     
         function get_contents() {    
            $xmlstr= file_get_contents("://inputphp"); 
            $filename=time().'.png'; 
            if(file_put_contents($filename,$strxml)){ 
             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']."
    
    "; 
     
         // (2) 请求Headers 
         foreach($_SERVER as $key => $value) { 
            if(substr($key, 0, 5) === 'HTTP_') { 
             $key = substr($key, 5); 
             $key = str_replace('_', '-', $key); 
     
             $raw .= $key.': '.$value."
    
    "; 
            } 
         } 
     
         // (3) 空行 
         $raw .= "
    
    "; 
     
         // (4) 请求Body 
         $raw .= file_get_contents('php://input'); 
     
         return $raw; 
    }
  • 相关阅读:
    Key-Value Memory Network
    Deep Mask Memory Network with Semantic Dependency and Context Moment for Aspect Level Sentiment Clas
    Deep Memory Network在Aspect Based Sentiment方向上的应用
    Deep Memory Network 深度记忆网络
    Self Attention 自注意力机制
    Attention基本公式及其变种
    *端策略优化算法(PPO)
    Policy Gradient 算法
    一本通 农场派对
    A
  • 原文地址:https://www.cnblogs.com/jshen/p/4475718.html
Copyright © 2020-2023  润新知