Recibir solicitudes de datos POST de varias partes en PHP
Pregunta
quiero recibir lo siguiente HTTP
solicitud en PHP:
Content-type: multipart/form-data;boundary=main_boundary
--main_boundary
Content-type: text/xml
<?xml version='1.0'?>
<content>
Some content goes here
</content>
--main_boundary
Content-type: multipart/mixed;boundary=sub_boundary
--sub_boundary
Content-type: application/octet-stream
File A contents
--sub_boundary
Content-type: application/octet-stream
File B contents
--sub_boundary
--main_boundary--
(Nota:He sangrado las subpartes solo para que sean más legibles para esta publicación).
No hablo PHP con mucha fluidez y me gustaría obtener ayuda/consejos para descubrir cómo recibir este tipo de solicitud de formulario de varias partes en código PHP.Una vez escribí un código en el que recibí un formulario HTML estándar y luego pude acceder a los elementos del formulario usando su nombre como clave de índice en el $HTTP_GET_VARS
matriz, pero en este caso no hay nombres de elementos de formulario y las partes de datos del formulario no son lineales (es decir,subpartes = matriz multinivel).
¡Agradecido por cualquier ayuda!
/roberto
Solución
$HTTP_GET_VARS
, $HTTP_POST_VARS
, etc.es una notación obsoleta, deberías usar $_GET
, $_POST
, etc.
Ahora, el contenido del archivo debería estar en el $_FILES
matriz global, mientras que, si no hay nombres de elementos, no estoy seguro de si el resto del contenido aparecerá en $_POST
.De todos modos, si always_populate_raw_post_data
la configuración es verdadera en php.ini, los datos deben estar en $HTTP_RAW_POST_DATA
.Además, toda la solicitud debería aparecer al leer. php://entrada.
Otros consejos
Debes tener en cuenta:
“php://input te permite leer datos POST sin procesar.Es una alternativa que consume menos memoria que $HTTP_RAW_POST_DATA y no necesita directivas especiales de php.ini.php://input no está disponible con enctype=”multipart/form-data”
Del manual de php...entonces parece que php://input no está disponible
No puedo comentar todavía, pero esto pretende complementar la respuesta de Pilsetnieks.
Se podrá acceder a los archivos cargados a través de la variable global $_FILE, se podrá acceder a otros parámetros a través de la variable global $_GET.