Heim >Backend-Entwicklung >PHP-Problem >Was ist der Unterschied zwischen php://input und $_post?

Was ist der Unterschied zwischen php://input und $_post?

青灯夜游
青灯夜游Original
2020-04-25 16:47:402578Durchsuche

Was ist der Unterschied zwischen php://input und $_post? Der folgende Artikel stellt es Ihnen vor. Es hat einen gewissen Referenzwert. Freunde in Not können sich darauf beziehen. Ich hoffe, es wird für alle hilfreich sein.

Was ist der Unterschied zwischen php://input und $_post?

Ein paar Sätze aus dem Handbuch:

  1. Bei HTTP-POST-Anfrage Wenn Inhalt -Typ ist application/x-www-form-urlencoded oder multipart/form-data, die Variablen werden in Form eines assoziativen Arrays an das aktuelle Skript übergeben.

  2. php://input ist ein schreibgeschützter Stream, der Zugriff auf die angeforderten Rohdaten bietet. Wenn enctype="multipart/form-data" verwendet wird, ist php://input ungültig.

Überprüfen:

post.html

<!DOCTYPE html>
<html>
<head>
    <title></title>
</head>
<body>
    <form action="getpost.php" method="post">
        <input type="text" name="name" value="saisai">
        <input type="submit" name="submit" value="submit">
    </form>
</body>
</html>

getpost.php

<?php
    echo "----------input--------<br />";
    var_dump(file_get_contents(&#39;php://input&#39;, &#39;r&#39;));
    echo "----------post---------<br />";
    var_dump($_POST);
?>

1. enctype = "application/x-www-form-urlencoded"

Anfragetext:

Content-Type: application/x-www-form-urlencoded
Content-Length: 25name=saisai&submit=submit

Ausgabe:

----------input--------

string &#39;name=saisai&submit=submit&#39; (length=25)

----------post---------

array (size=2)
  &#39;name&#39; => string &#39;saisai&#39; (length=6)
  &#39;submit&#39; => string &#39;submit&#39; (length=6)

Zusammenfassung: Wenn enctype="application/x- www -form-urlencoded“ werden die Daten (name=saisai&submit=submit) im Anfragetext in ein assoziatives Array konvertiert und in $_POST abgelegt, während php://input die Originaldaten (Rohdaten) erhält.

2. Wenn enctype="multipart/form-data"

2.1 Formular:

    <form action="getpost.php" method="post" enctype="multipart/form-data">
        <input type="text" name="name" value="saisai">
        <input type="submit" name="submit" value="submit">
    </form>

Anfragebetreff:

Content-Type: multipart/form-data; boundary=---------------------------22554656810024
Content-Length: 249

-----------------------------22554656810024
Content-Disposition: form-data; name="name"

saisai
-----------------------------22554656810024
Content-Disposition: form-data; name="submit"

submit
-----------------------------22554656810024--

Ausgabe:

----------input--------

string &#39;&#39; (length=0)

----------post---------

array (size=2)
  &#39;name&#39; => string &#39;saisai&#39; (length=6)
  &#39;submit&#39; => string &#39;submit&#39; (length=6)

Zusammenfassung: Wenn enctype="multipart/form-data" und keine Upload-Dateisteuerung vorhanden ist, kann $_POST Daten normal drucken, aber php:// ist ungültig.

2.2 Formular (Datei-Upload hinzufügen):

<form action="getpost.php" method="post" enctype="multipart/form-data">
        <input type="text" name="name" value="saisai">
        <input type="submit" name="submit" value="submit">
 </form>

Anfragebetreff:

Content-Type: multipart/form-data; boundary=---------------------------272321281228527
Content-Length: 68386

-----------------------------272321281228527
Content-Disposition: form-data; name="name"

saisai
-----------------------------272321281228527
Content-Disposition: form-data; name="filename"; filename="dog.png"
Content-Type: image/png

                   一堆乱码                    
-----------------------------272321281228527
Content-Disposition: form-data; name="submit"

submit
-----------------------------272321281228527--

Ausgabe:

----------input--------

string &#39;&#39; (length=0)

----------post---------

array (size=2)
  &#39;name&#39; => string &#39;saisai&#39; (length=6)
  &#39;submit&#39; => string &#39;submit&#39; (length=6)

Zusammenfassung: In enctype="multipart/form -data“ und es gibt eine Datei-Upload-Kontrolle, $_POST kann die eingehenden Daten ausdrucken, schließt jedoch alle hochgeladenen Inhalte aus. php:// ist ungültig.

3. enctype="text/plain"

Formular:

<form action="getpost.php" method="post" enctype="text/plain">
        <input type="text" name="name" value="saisai">
        
        <input type="submit" name="submit" value="submit">
</form>

Anfragetext:

Content-Type: text/plain
Content-Length: 28
name=saisai
submit=submit

Ausgabe:

----------input--------

string &#39;name=saisai

submit=submit

&#39; (length=28)

----------post---------

array (size=0)
  empty

Zusammenfassung: Bei enctype="text/plain" gibt es keinen Inhalt in $_POST und er wird in Schlüssel-Wert-Paaren in php://input gespeichert.

Zusammenfassung:

  1. Wenn der Inhaltstyp der HTTP-POST-Anfrage application/x-www-form-urlencoded oder multipart/form ist -data: php://input enthält die Originaldaten ähnlich wie a=1&b=2. $_POST enthält ein assoziatives Array und lädt den Inhalt des Steuerelements nicht hoch.

  2. php://input ist ein schreibgeschützter Stream, der Zugriff auf die angeforderten Rohdaten bietet. Wenn enctype="multipart/form-data" verwendet wird, ist php://input ungültig.

  3. $_POST kann keine Beitragsdaten abrufen, wenn Content-Type = „text/plain“ ist, php://input jedoch schon.

Weitere Informationen zu diesem Thema finden Sie auf der chinesischen PHP-Website! !

Das obige ist der detaillierte Inhalt vonWas ist der Unterschied zwischen php://input und $_post?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
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