2011-07-24 9 views
13

- Pregunta -¿Cómo accedo a los datos de REST API PUT de PHP en el lado del servidor?

estoy empezando a cabo con la API REST y estoy haciendo bastante confusa.

Esto es lo que mi PHP cRUL del lado del cliente parece para un PUT.

case 'PUT': 
    curl_setopt($handle, CURLOPT_CUSTOMREQUEST, 'PUT'); 
    curl_setopt($handle, CURLOPT_POSTFIELDS, $data); 
    break; 

Ahora, cuando miro en el servidor de mi $ _SERVER [ 'REQUEST_METHOD'] muestra PUT, pero mi pregunta es ¿cómo puedo obtener los datos $ envié con CURLOPT_POSTFIELDS.

Todo lo que tengo que hacer es enviar los $ datos enviados con una solicitud PUT a la siguiente línea. Como

$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 la tarea) -

Soy nuevo así que no puedo responder a mi propia pregunta hasta después de 8 horas ... raro :)

Vale Después de trabajar con las grandes personas de aquí, debo decir que encontramos la respuesta. Me estoy pateando por ser tan fácil, al mismo tiempo 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 tomó mis datos de una matriz a una cadena amistosa de la url.

A continuación tuve que agregar.

parse_str(file_get_contents('php://input'), $put); 

Ahora puedo hacer cosas como $ put ['data'].

La respuesta que dio PaulPRO arriba funciona para obtener los datos de la misma manera que file_get_contents() lo hizo con menos líneas. Nos quedamos atrapados tratando de encontrar la forma de analizar los datos, que fue donde mi falta de http_build_query() que había visto en otro sitio se puso en juego.

Así es como funciona todo.

  1. Los datos se ponen en una matriz normal.
  2. http_build_query() lo convierte en una bonita cadena casi como GET.
  3. file_get_contents() lo transporta del cliente al servidor.
  4. parse_str() luego lo vuelve a convertir en una matriz.

Estoy viendo un montón de 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. Quizás estoy equivocado. ¿Me estoy perdiendo de algo?

+1

Tal vez [estos] (http://blog.steveklabnik.com/2011/07/03/nobody-understands-rest-or-http.html) [enlaces] (http://quandyfactory.com/blog/65 /designing_a_restful_web_application#toc_5.3) te ayudará a comprender mejor algunas de las peculiaridades de REST. – nevvermind

Respuesta

7

Desde el PHP Manual: datos

PUT proviene de la entrada estándar: el uso

$putdatafp = fopen("php://input", "r");

Ejemplo:

$putfp = fopen('php://input', 'r'); 
$putdata = ''; 
while($data = fread($putfp, 1024)) 
    $putdata .= $data; 
fclose($putfp); 
+0

Bien, tengo una ventaja con ambos. El superior devolvió el Recurso # 11. ¿Cómo accedo a ese recurso? Y el fondo devolvió los datos en una secuencia desordenada, pero veo que está allí. – Shylor

+0

@sylor Edité mi publicación. ¿Están los datos correctamente en '$ putdata' después de ese código? – Paulpro

+0

Estoy obteniendo algunos errores en el tamaño del archivo. Advertencia: filesize() [function.filesize]: stat failed para Resource id # 11. También me dice que el tamaño del archivo no puede ser 0 en fread. – Shylor

4

He mismo escenario donde adentro, tiene que enviar los datos al Servidor PHP a través de la API ReST usando el método PUT. Me costó casi dos horas para encontrar la solución, pero finalmente encontré la forma:

En Curl:

$postData = http_build_query($data); 
curl_setopt($ch, CURLOPT_POSTFIELDS,$postData); 

Tenemos que analizar los datos a un let variables dicen: $ putData, en este caso, es el procedimiento Analizar cadena:

parse_str(file_get_contents("php://input"),$putData); 

continuación, imprima el $putData, tendrán la misma matriz que se está publicando en el rizo ..

+0

Esta respuesta es la mejor que me gusta. 'parse_str (file_get_contents (" php: // input "), $ putData); ' –

Cuestiones relacionadas