Bandingkan perbedaan antara metode pengiriman formulir POST dan fsockopen.
Ketika formulir dikirimkan dalam mode POST,
$_POST dan php://input bisa mendapatkan nilainya, dan $HTTP_RAW_POST_DATA kosong.
$_POST mengatur data yang dikirimkan dalam array asosiatif dan melakukan pemrosesan pengkodean, seperti urldecode, dan bahkan konversi pengkodean.
php://input dapat memperoleh data mentah POST yang belum diproses dengan membaca file melalui aliran input.
php://input memungkinkan membaca data mentah POST. Ini memberi lebih sedikit tekanan pada memori dibandingkan $HTTP_RAW_POST_DATA dan tidak memerlukan pengaturan php.ini khusus. php://input tidak dapat digunakan dengan enctype="multipart/form-data".
Contoh fsockopen mengirimkan data POST:
$sock = fsockopen("localhost", 80, $errno, $errstr, 30);
if (!$sock) die("$errstr ($errno)n");
$data = "txt=" .urlencode("中") .
fwrite($sock, "POST /posttest/response.php HTTP/1.0rn");
fwrite($sock, "Host: localhostrn");
fwrite($sock, "Jenis konten: application/x-www-form-urlencodedrn");
fwrite($sock, "Panjang konten: " . strlen($data) . "rn");
fwrite($sock, "Terima: */*rn");
fwrite($kaus kaki, "rn");
fwrite($kaus kaki, "$datarn");
fwrite($kaus kaki, "rn");
$header = "";
while ($str = trim(fgets($sock, 4096)))
$header .= "$strn";
gema "n";
$tubuh = "";
sementara (!feof($kaus kaki))
$body .= fgets($sock, 4096);
fclose($kaus kaki);
echo $body;
konsisten dengan hasil (1)
:
1. Gunakan php://input untuk mendapatkan data POST asli dengan mudah.
2. $HTTP_RAW_POST_DATA hanya valid jika tipe Tipe Konten POST tidak dikenali oleh PHP.
Misalnya, data POST yang biasanya dikirimkan melalui formulir halaman tidak dapat diteruskan melalui $ HTTP_RAW_POST_DATA diekstraksi. Atribut tipe pengkodeannya (atribut enctype) adalah application/x-www-form-urlencoded, multipart/form-data.
Catatan: Meskipun Anda secara eksplisit mengubah atribut enctype di halaman ke tipe yang tidak dikenali oleh PHP, atribut tersebut tetap tidak valid.
Karena atribut pengkodean pengiriman formulir terbatas pada formulir, jenis yang tidak dapat dikenali akan dianggap dikirimkan dalam pengkodean default (yaitu application/x-www-form-urlencoded)
3. $_POST hanya ketika data ada di application/x-www -form-urlencoded Type hanya dapat diperoleh saat mengirimkan.