Hosting guebs
Manejando la carga de archivos
PHP Manual

Soporte del método PUT

PHP ofrece soporte para el método HTTP PUT utilizado por algunos clientes para almacenar archivos en un servidor. Las peticiones PUT son mucho más simples que una carga de archivos mediante solicitudes POST y se ven algo como esto:

PUT /path/filename.html HTTP/1.1

Esto normalmente significa que el cliente remoto quiere guardar el contenido que sigue como: /path/filename.html en el árbol web. Obviamente no es una buena idea para Apache o PHP dejar automáticamente a todo el mundo que pueda sobrescribir cualquier archivo del árbol web. Para manejar esta solicitud se debe primero decir al servidor web que se desea que cierto script de PHP maneje la petición. En Apache se hace esto con la directiva de Script. Se puede colocar casi en cualquier parte del archivo de configuración de Apache. Un lugar común es dentro de un bloque <Directory> o tal vez dentro de un bloque <VirtualHost>. Una línea como ésta haría el truco:

Script PUT /put.php

Esto le dice a Apache que envíe todas peticiones PUT para URIs que coincidan con el contexto en el cual se pone esta línea en el script put.php. Esto asume, por supuesto, que se tiene habilitado PHP para la extensión .php y que PHP está activo. El recurso de destino para todas las solicitudes PUT a este script tiene que ser en propio script, el archivo subido no debe tener un nombre de archivo.

Con PHP entonces se haría algo como lo siguiente en el put.php. Esto copiaría el contenido del archivo subido al archivo myputfile.ext en el servidor. Es probable que se deseen realizar algunas verificaciones y/o autenticar al usuario antes de realizar esta copia de archivo.

Ejemplo #1 Guardando archivos HTTP PUT

<?php
/* datos PUT vienen en en el flujo de entrada estándar  */
$putdata fopen("php://input""r");

/* Abre un archivo para escribir */
$fp fopen("myputfile.ext""w");

/* Leer los datos de 1 KB a la vez
   y escribir en el archivo */
while ($data fread($putdata1024))
  
fwrite($fp$data);

/* Cerrar los flujos */
fclose($fp);
fclose($putdata);
?>


Manejando la carga de archivos
PHP Manual