framework - rest api php mysql tutorial
¿Cómo accedo a los datos de PHP REST API PUT en el lado del servidor? (2)
Del manual de PHP :
Los datos PUT provienen de stdin:
$putdatafp = fopen("php://input", "r");
Ejemplo de uso:
$putfp = fopen(''php://input'', ''r'');
$putdata = '''';
while($data = fread($putfp, 1024))
$putdata .= $data;
fclose($putfp);
- Pregunta -
Estoy empezando con la API REST y me estoy confundiendo bastante.
Esto es lo que parece mi lado de cliente cRUL de PHP para un PUT.
case ''PUT'':
curl_setopt($handle, CURLOPT_CUSTOMREQUEST, ''PUT'');
curl_setopt($handle, CURLOPT_POSTFIELDS, $data);
break;
Ahora, cuando miro el servidor, mi $ _SERVER [''REQUEST_METHOD''] muestra PUT, pero mi pregunta es cómo obtengo los $ data que envié con CURLOPT_POSTFIELDS.
Todo lo que necesito hacer es enviar los datos enviados con una solicitud PUT a la siguiente línea. Me gusta
$value = $data[''curl_data''];
He visto tanto desorden en este tema que me está dando dolor de cabeza. Parece tan fácil en el lado del cliente php, pero nadie tiene respuestas que funcionen para el lado del servidor php.
¡Gracias por cualquier ayuda!
- Respuesta (después de ayuda y tarea) -
Soy nuevo, así que no puedo responder mi propia pregunta hasta después de las 8 horas ... impar :)
Bien, después de trabajar con las grandes personas aquí, debo decir que encontramos la respuesta. Me estoy pateando a mí mismo por ser tan fácil, al mismo tiempo que era confuso.
curl_setopt($handle, CURLOPT_CUSTOMREQUEST, ''PUT'');
curl_setopt($handle, CURLOPT_POSTFIELDS, http_build_query($data));
El primer cambio (arriba) tuve que agregar http_build_query () alrededor de $ data. Esto llevó mis datos de una matriz a una cadena amigable con url.
A continuación tuve que añadir.
parse_str(file_get_contents(''php://input''), $put);
Ahora puedo hacer cosas como $ put [''data''].
La respuesta que PaulPRO dio anteriormente funciona para obtener los datos de la misma manera que file_get_contents () hizo con menos líneas. Nos quedamos atascados tratando de averiguar cómo analizar los datos, que fue donde mi falta de http_build_query () que había visto en otro sitio entró en juego.
Así es como funciona todo.
- Los datos se ponen en una matriz normal.
- http_build_query () lo convierte en una bonita cadena GET casi como GET.
- file_get_contents () lo transporta desde el cliente al servidor.
- parse_str () luego lo vuelve a convertir en una matriz.
Estoy viendo muchos mensajes sobre el uso de PUT para enviar archivos. Puedo ver cómo funcionaría esto, pero por lo que leí en todo este proceso REST fue que PUT es para actualizar los datos, ya que la publicación es para crear datos. Tal vez estoy equivocado. ¿Me estoy perdiendo de algo?
Tengo el mismo escenario donde, tengo que enviar datos al servidor PHP a través de ReST API usando el método PUT. Luché casi un par de horas para encontrar la solución, pero finalmente encontré el camino:
En CURL:
$postData = http_build_query($data);
curl_setopt($ch, CURLOPT_POSTFIELDS,$postData);
Tenemos que analizar los datos a una variable, digamos: $ putData, aquí está el procedimiento de cadena de análisis:
parse_str(file_get_contents("php://input"),$putData);
Luego, imprima $putData
, obtendrá la misma matriz que está publicando en el rizo.