php - disable method options apache
¿Cómo habilitar y usar HTTP PUT y DELETE con Apache2 y PHP? (5)
AllowOverride AuthConfig
prueba esto. Autenticación puede ser el problema. Estaba trabajando con un script CGI escrito en C ++, y me enfrenté a algunos problemas de autenticación cuando pasaba DELETE. La solución anterior me ayudó. También puede ser útil en tu caso.
Además, incluso si no obtiene la solución para su problema de PUT y DELETE, no deje de funcionar en lugar de usar "CORS". Es una aplicación de google chrome, que te ayudará a soslayar el problema, pero recuerda que es una solución temporal, para que tu trabajo o tus experimentos no permanezcan congelados por mucho tiempo. Obviamente, no puede pedirle a su cliente que tenga habilitado "CORS" para ejecutar su solución, ya que puede comprometer la seguridad de los sistemas.
Debería ser tan simple. He seguido todos los tutoriales y foros que pude encontrar, pero no puedo hacerlo funcionar. Simplemente quiero construir una API RESTful en PHP en Apache2.
En mi directiva VirtualHost digo:
<Directory />
AllowOverride All
<Limit GET HEAD POST PUT DELETE OPTIONS>
Order Allow,Deny
Allow from all
</Limit>
</Directory>
Sin embargo, cada solicitud PUT que hago al servidor, obtengo el método 405 no soportado.
Alguien abogó por usar la directiva Script, pero como utilizo mod_php, a diferencia de CGI, no veo por qué funcionaría.
La gente menciona usar WebDAV, pero a mí eso me parece excesivo. Después de todo, no necesito el bloqueo DAV, un sistema de archivos DAV, etc. Todo lo que quiero hacer es pasar la solicitud a un script PHP y manejar todo yo mismo. Solo quiero habilitar PUT y DELETE para la semántica limpia.
En Linux, /etc/apache2/mods-enabled/php5.conf dans php5.load
existe. Si no, habilita estos módulos (puede requerir sudo apt-get install libapache2-mod-php5
).
Las limitaciones técnicas con el uso de las solicitudes PUT y DELETE no se encuentran en PHP o Apache2; en cambio, se trata de la carga del navegador para enviar esos tipos de solicitudes.
Simplemente poner <form action = "" method = "PUT"> no funcionará porque no hay navegadores que admitan ese método (y simplemente lo harían por defecto a GET, tratando PUT de la misma manera que trataría un galimatías como FDSFGS). Tristemente, esos verbos HTTP están limitados al ámbito de navegadores de aplicaciones que no son de escritorio (es decir, consumidores de servicios web).
No necesita configurar nada. Solo asegúrese de que las solicitudes se correlacionen con su archivo PHP y use las solicitudes con información de ruta. Por ejemplo, si tiene en la raíz un archivo llamado handler.php
con este contenido:
<?php
var_dump($_SERVER[''REQUEST_METHOD'']);
var_dump($_SERVER[''REQUEST_URI'']);
var_dump($_SERVER[''PATH_INFO'']);
if (($stream = fopen(''php://input'', "r")) !== FALSE)
var_dump(stream_get_contents($stream));
La siguiente solicitud HTTP funcionaría:
Established connection with 127.0.0.1 on port 81
PUT /handler.php/bla/foo HTTP/1.1
Host: localhost:81
Content-length: 5
boo
HTTP/1.1 200 OK
Date: Sat, 29 May 2010 16:00:20 GMT
Server: Apache/2.2.13 (Win32) PHP/5.3.0
X-Powered-By: PHP/5.3.0
Content-Length: 89
Content-Type: text/html
string(3) "PUT"
string(20) "/handler.php/bla/foo"
string(8) "/bla/foo"
string(5) "boo
"
Connection closed remotely.
Puede ocultar la extensión "php" con MultiViews o puede hacer que las URL sean completamente lógicas con mod_rewrite .
Consulte también la documentación de la directiva AcceptPathInfo y esta pregunta sobre cómo hacer que PHP no analice datos POST cuando enctype es multipart/form-data
.
Solo puede publicar el nombre del archivo para eliminar en delete.php en el servidor, lo que puede desvincular fácilmente () el archivo.