PHP soporta el método HTTP PUT utilizado por los navegadores para almacenar ficheros en un servidor. Las solicitudes de tipo PUT son mucho más simples que las cargas de ficheros utilizando el tipo POST, y se parecen a:
Ejemplo #1 Método PUT para las cargas de ficheros
PUT /path/filename.html HTTP/1.1
Normalmente, esto significa que el servidor remoto guardará los datos que siguen en el fichero: /path/filename.html de su disco. Esto no es, por supuesto, muy seguro permitir que Apache o PHP sobrescriban cualquier fichero de la arborescencia. Para evitar esto, primero se debe indicar al servidor que se desea que un script PHP dado gestione la solicitud. Con Apache, hay una directiva para ello: Script. Puede ser colocada en cualquier lugar del fichero de configuración de Apache. En general, los webmasters la colocan en el bloque <Directory>
, o tal vez en el bloque <VirtualHost>
. La siguiente línea hará muy bien el trabajo:
Ejemplo #2 Directiva Apache para la carga por método PUT
Script PUT /put.php
Indica a Apache que debe enviar las solicitudes de carga por método PUT al script put.php. Por supuesto, esto presupone que se ha activado PHP para que maneje los ficheros de tipo .php, y que PHP está activo. El recurso de destino para todas las solicitudes PUT de este script debe ser el script mismo, y no el nombre del fichero que el fichero cargado debe tener.
Con PHP, se querría hacer algo como lo siguiente en su put.php. Esto copiará el contenido del fichero cargado en el fichero myputfile.ext en el servidor. Probablemente se querrá realizar algunas verificaciones y/o identificar al usuario antes de realizar esta copia de fichero.
Ejemplo #3 Guardado de ficheros HTTP PUT
<?php
/* Los datos PUT llegan del flujo */
$putdata = fopen("php://input", "r");
/* Abre un fichero para escritura */
$fp = fopen("myputfile.ext", "w");
/* Lectura de los datos, 1 Ko a la vez y escritura en el fichero */
while ($data = fread($putdata, 1024))
fwrite($fp, $data);
/* Cierre del flujo */
fclose($fp);
fclose($putdata);
?>