2009-12-02 11 views
12

Estoy jugando con REST en PHP y entiendo que puedo capturar el método de solicitud vi a $_SERVER['REQUEST_METHOD']. Pero, ¿cómo desencadenar solicitudes PUT/DELETE en PHP sin el uso de cURL? Quiero usar las características de una instalación predeterminada de PHP para hacer esto. No puedo imaginar cambiar el atributo de método de la etiqueta de formulario para especificar un método distinto de GET o POST que funcionaría en todos los navegadores ... además el estándar HTML no lo reconoce.¿Cómo envío una solicitud PUT/DELETE en HTML?

Estoy en PHP 5.2.6, por cierto.

Gracias.

+0

Cuando dices "en PHP", eso implica que quieres hacer la solicitud en el servidor, y así es como he respondido. Sus declaraciones posteriores sobre navegadores y HTML implican que quiere hacer esto desde el lado del cliente, sin embargo ... ¿Puede aclarar esto? –

+1

En realidad, no debería haber mencionado PHP en absoluto. Solo quiero que mi cliente, ya sea un navegador web o lo que sea, use HTML para transmitir los datos a través de HTTP como PUT o DELETE en lugar de solo GET AND POST. – Housni

+0

Ese tipo de cambio la pregunta completa ..... Así que su "etiqueta php" es engañosa y probablemente limitará su audiencia. Es posible que desee volver a publicar y ser un poco más descriptivo de lo que está tratando de lograr. – ChronoFish

Respuesta

1

fopen hará HTTP, pero creo que solo hará solicitudes GET. Si utiliza fsockopen, que necesita para manejar el protocolo HTTP a sí mismo, la generación de cabeceras, etc ..

Usted puede utilizar HTTPRequest (en la extensión php_http) o PEAR.

Actualización:

Si usted está realmente hablando de hacer PUT/DELETE solicitudes a sus scripts PHP, en lugar de de ellos, esta pregunta puede ser de su interés:

Are the PUT, DELETE, HEAD, etc methods available in most web browsers?

+0

Estaba viendo HTTPRequest. Estoy tratando de imaginar cómo implementaría PUT. Tendría un formulario HTML con los datos ya presentes en los campos. En el envío, no entiendo cómo puedo activar PUT para que mi manejador de formulario maneje esto como PUT. ¿Podría arrojar algo de luz sobre esto, por favor? Gracias. – Housni

+0

@Housni Suponiendo que el navegador admita PUT, implica que tiene la capacidad para que HTML/JS especifique exactamente qué hay en el cuerpo de esa solicitud PUT. Por ahora, lo mejor que puede hacer de manera portátil es hacer un POST. Si utiliza 'method =" PUT "' sospecho que el navegador probablemente tratará la solicitud exactamente como POST, lo que significa que los campos del formulario serán "multipart/form-data" codificados, por lo que el cuerpo del PUT será "field1 = value & field1 = value & ... ". Creo que puedes usar PUT/DELETE con datos arbitrarios a través de JavaScript 'XMLHTTPRequest', aunque no lo he intentado. –

0

Si desea usar las funciones incorporadas de PHP, pero no cURL, está prácticamente atascado con fsockopen(), etc.,

o, en el mejor de los casos, una biblioteca construida alrededor de esas funciones, como Snoopy

5

Normalmente esto se realiza mediante un campo de formulario oculto y se maneja en la aplicación (no en el servidor web, en general).

<input type="hidden" name="_method" value="put" /> 

Así que en este caso tendrá que utilizar un simple conjunto de if-else para determinar si se anula la variable _method (válidamente, por supuesto). Usaría algo como:

$method = 'get'; 
if($_SERVER['REQUEST_METHOD'] == 'POST') { 
    if(isset($_POST['_method'] 
    && ($_POST['_method'] == 'PUT' || $_POST['_method'] == 'DELETE')) { 
    $method = strtolower($_POST['_method']); 
    } else { 
    $method = 'post'; 
    } 
} 

Esta sería una manera simple de determinar el tipo de solicitud para su aplicación o marco.

+0

Eso es lo que también se me ocurrió ... como lo hace Rails. Pero eso depende en gran medida de la convención. Si alguien editando la plantilla no agrega eso, REST no funcionaría. Pero esa parece ser la única solución que pude encontrar también. Diga que no es así :) – Housni

+1

No, no! Coloque este tipo de código en el * framework * y haga que sea accesible para el código: de esta manera, la vista no hace nada, y el método ya está determinado. –

-1

Es posible que desee echar un vistazo a WebDav (PHP WebDav slide show). Está diseñado para PUSH, DELETE, Etc ... Por supuesto, el servidor al que se dirige necesita aceptar PUSH y DELETE, lo que significaría que Apache está usando mod_webdav o algo similar. De lo contrario, se requerirá una solución de nivel inferior (como han indicado otros)

Cuestiones relacionadas