Compare las diferencias entre los métodos de envío de formulario POST y fsockopen.
Cuando el formulario se envía en modo POST,
$_POST y php://input pueden obtener el valor y $HTTP_RAW_POST_DATA está vacío.
$_POST organiza los datos enviados en una matriz asociativa y realiza procesamiento de codificación, como urldecode, e incluso conversión de codificación.
php://input puede obtener datos sin procesar de POST leyendo archivos a través del flujo de entrada.
php://input permite leer los datos sin procesar de POST. Ejerce menos presión sobre la memoria que $HTTP_RAW_POST_DATA y no requiere ninguna configuración especial de php.ini. php://input no se puede utilizar con enctype="multipart/form-data".
Ejemplo de fsockopen enviando datos POST:
$sock = fsockopen("localhost", 80, $errno, $errstr, 30);
if (!$sock) die("$errstr ($errno)n");
$datos = "txt=" . urlencode("中") . "&bar=" . urlencode("Valor de la barra");
fwrite($calcetín, "POST /posttest/response.php HTTP/1.0rn");
fwrite($calcetín, "Host: localhostrn");
fwrite($sock, "Tipo de contenido: aplicación/x-www-form-urlencodedrn");
fwrite($sock, "Longitud del contenido: " . strlen($datos). "rn");
fwrite($calcetín, "Aceptar: */*rn");
fwrite($calcetín, "rn");
fwrite($calcetín, "$datosrn");
fwrite($calcetín, "rn");
$encabezados = "";
mientras ($str = recortar(fgets($calcetín, 4096)))
$encabezados .= "$cadenan";
eco "n";
$cuerpo = "";
mientras (!feof($calcetín))
$cuerpo .= fgets($calcetín, 4096);
fclose($calcetín);
echo $body;
es consistente con el resultado de (1)
:
1. Utilice php://input para obtener fácilmente los datos POST originales.
2. $HTTP_RAW_POST_DATA solo es válido cuando PHP no reconoce el tipo de contenido de POST.
Por ejemplo, los datos POST que generalmente se envían a través de formularios de página no se pueden pasar. a través de $ HTTP_RAW_POST_DATA se extrae. Su atributo de tipo de codificación (atributo enctype) es application/x-www-form-urlencoded, multipart/form-data.
Nota: Incluso si cambia explícitamente el atributo enctype en la página a un tipo que PHP no reconoce, aún no será válido.
Dado que el atributo de codificación de envío de formulario está limitado al formulario, se considerará que los tipos irreconocibles se envían con la codificación predeterminada (es decir, application/x-www-form-urlencoded)
3. $_POST solo cuando los datos están en application/x-www -form-urlencoded El tipo solo se puede obtener al enviar.