Detaillierte Erläuterung des Eingabestreams php://input

*文
Freigeben: 2023-03-18 18:32:01
Original
4119 Leute haben es durchsucht

In diesem Artikel werden hauptsächlich Beispiele für den PHP-Eingabestream php://input vorgestellt und Beispiele für eine eingehende Untersuchung des Eingabestreams php://input bereitgestellt. Ich hoffe, es hilft allen.

Was die Einführung in php://input betrifft, so gibt es im offiziellen PHP-Handbuch einen Absatz, der sie klar umreißt.
„php://input ermöglicht das Lesen von POST-Rohdaten. Es ist eine weniger speicherintensive Alternative zu $HTTP_RAW_POST_DATA und erfordert keine speziellen php.ini-Anweisungen.“ Nicht verfügbar mit enctype="multipart/form-data".

Übersetzt sieht es so aus:
"php://input ist OK. Unverarbeitete POST-Daten lesen. Im Vergleich zu $HTTP_RAW_POST_DATA belastet es den Speicher weniger und erfordert keine speziellen php.ini-Einstellungen. php://input can used for enctype=multipart/form-data“
Die Zusammenfassung lautet wie folgt:

  • 1), Coentent-Type übernimmt nur die value application/ In den beiden Fällen x-www-data-urlencoded und multipart/form-data füllt PHP die entsprechenden Daten im http-Anforderungspaket in die globale Variable $_POST

  • 2) , wenn PHP den Content-Type-Typ nicht erkennen kann, werden die entsprechenden Daten im http-Anforderungspaket in die Variable $HTTP_RAW_POST_DATA gefüllt

  • 3), nur der Coentent- Der Typ ist multipart/form-data. PHP füllt die entsprechenden Daten im HTTP-Anforderungspaket nicht in php://input ein, andernfalls wird die durch Coentent-Length angegebene Länge ausgefüllt Der Inhaltstyp ist application/x-www-data-urlencoded, die php://-Eingabedaten stimmen mit den $_POST-Daten

  • 5), php://-Eingabedaten überein ist immer dasselbe wie $HTTP_RAW_POST_DATA, aber php://input ist effizienter als $HTTP_RAW_POST_DATA und erfordert keine besonderen Einstellungen. php.ini

  • 6), PHP Der query_path-Teil von Das PATH-Feld wird in der globalen Variablen $_GET ausgefüllt. Normalerweise ist der Textkörper der von der GET-Methode übermittelten HTTP-Anfrage leer. >

  • Zusammenfassend lässt sich sagen, dass Sie die Rückrufdaten nicht von APP oder anderen abrufen können Schnittstellen mit $_POST, versuchen Sie es mit php://input
  • 1. Akzeptieren Sie XML-Daten

2. Miniprogramm zum Hochladen von Bildern auf den Server vom Mobiltelefon


Senden

//发送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);
Nach dem Login kopieren




Empfangen


//@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; 
}
Nach dem Login kopieren


3: Holen Sie sich den Originaltext der HTTP-Anfrage


/**
 *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();
Nach dem Login kopieren



Verwandte Empfehlungen:


PHP-Post get
/**
 * 获取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;
}
Nach dem Login kopieren


PHP-Post-Methode sendet Array

PHP postet eine große Datenmenge. Als ich die Lösung für das Datenverlustproblem entdeckte, poste ich das Tutorial zu Datenverlust_PHP

Das obige ist der detaillierte Inhalt vonDetaillierte Erläuterung des Eingabestreams php://input. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Verwandte Etiketten:
Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage