Home >php教程 >PHP开发 >PHP input stream php://input example explanation

PHP input stream php://input example explanation

高洛峰
高洛峰Original
2016-12-23 13:01:192206browse

For the introduction to php://input, the official PHP 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 for enctype=multipart/form-data"
The summary is as follows:

1), Coentent-Type only applies when the value is application/x-www-data-urlencoded and multipart/form-data In this case, PHP will fill in the corresponding data in the http request packet into the global variable $_POST

2). When the Content-Type type is not recognized by PHP, it will fill in the corresponding data in the http request packet into 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 the length will be filled in in other cases. Specified by Coentent-Length.

4), php://input data is consistent with $_POST data only when Content-Type is application/x-www-data-urlencoded.

5), php://. The 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 the query_path part of the PATH field into the global variable $_GET . Normally, the body of the http request submitted by the GET method is empty. To sum up, when you cannot get the callback data from the APP or some interfaces using $_POST, try using php://input. Try

1. Accept xml data

//发送xml数据
$xml = &#39;<xml>xmldata</xml>&#39;;//要发送的xml 
$url = &#39;http://localhost/test/getXML.php&#39;;//接收XML地址 
$header = &#39;Content-type: text/xml&#39;;//定义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. Mini program for uploading pictures to the server via mobile phone

Send

//@file phpinput_post.php 
$data=file_get_contents(&#39;btn.png&#39;); 
$http_entity_body = $data; 
$http_entity_type = &#39;application/x-www-form-urlencoded&#39;; 
$http_entity_length = strlen($http_entity_body); 
$host = &#39;127.0.0.1&#39;; 
$port = 80; 
$path = &#39;/image.php&#39;; 
$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; 
}

Receive

/**
 *Recieve image data
 **/
error_reporting(E_ALL);
 
function get_contents() {
 $xmlstr= file_get_contents("php://input");
 $filename=file_put_contentsxmltime().&#39;.png&#39;;
 if(($filename,$str)){
 echo &#39;success&#39;;
 }else{
 echo &#39;failed&#39;;
 } 
  }
get_contents();

3: Get the original text of the HTTP request

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

The above are three small programs for PHP input flow Chestnut, the purpose is to help everyone understand the PHP input stream more accurately. I hope you will gain something.

For more relevant articles on the PHP input stream php://input, please pay attention to the PHP Chinese website!
Statement:
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