PHP input stream php://input example explanation, _PHP tutorial

WBOY
Release: 2016-07-12 09:02:34
Original
777 people have browsed it

An example explanation of the PHP input stream php://input,

For the introduction of php://input, the PHP official manual document has a paragraph that clearly outlines it.
“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”.

Translated, it is like this:
"php://input can read unprocessed POST data. Compared with $HTTP_RAW_POST_DATA, it puts less pressure on memory and does not require special php.ini settings. php:/ /input cannot be used with enctype=multipart/form-data”
The summary is as follows:

  • 1). PHP will fill in the corresponding data in the http request packet into the global variable only when the value of Coentent-Type is application/x-www-data-urlencoded and multipart/form-data. $_POST
  • 2) When PHP cannot recognize the Content-Type type, the corresponding data in the http request package will be filled in the variable $HTTP_RAW_POST_DATA
  • 3). Only when the Coentent-Type is multipart/form-data, PHP will not fill in the corresponding data in the http request packet into php://input, otherwise it will be the same in other situations. The length of the padding, specified by Coentent-Length.
  • 4). Only when the Content-Type is application/x-www-data-urlencoded, the php://input data is consistent with the $_POST data.
  • 5), php://input data is always the same as $HTTP_RAW_POST_DATA, but php://input is more efficient than $HTTP_RAW_POST_DATA and does not require special settings for php.ini
  • 6), PHP will fill in the query_path part of the PATH field into the global variable $_GET. Normally, the body of an http request submitted by the GET method is empty.

To sum up, when you cannot get the callback data from APP or some interfaces using $_POST, try using php://input

1. Accept xml data

//发送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);

Copy after login

2. A small program for uploading pictures to the server from your mobile phone
Send

//@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; 
}

Copy after login

Receive

/**
 *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();

Copy after login

3: Get the original text of the HTTP request

/**
 * 获取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;
}
Copy after login

The above are three small chestnuts for PHP input flow. The purpose is to help everyone understand the PHP input flow more accurately. I hope you can gain something.

Articles you may be interested in:

  • Introduction to PHP input stream php://input
  • php input stream php://input usage example (php sends image stream to Server)
  • php input stream php://input usage brief analysis

www.bkjia.comtruehttp: //www.bkjia.com/PHPjc/1084573.htmlTechArticleExplanation of PHP input stream php://input example. For an introduction to php://input, the official PHP manual document is One passage outlines it very clearly. "php://input allows you to read raw POST da...
Related labels:
php
source:php.cn
Statement of this Website
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template