gratiszona
Estas en: gratiszona >> apuntes >> php

Envio de archivos

Envio de archivos con el método POST

PHP es capaz de recibir envíos de archivo de cualquier navegador que cumpla la norma RFC-1867 (entre los que se
incluyen Netscape Navigator 3 o posterior, Microsoft Internet Explorer 3 con un parche o posterior sin éste). Ésta
característica permite que los usuarios envien archivos de texto y binarios. Mediante la autentificación y funciones de
manejo de archivos de PHP, es posible un control total de quién puede enviar archivos y que se hace con éstos una vez
recibidos.
Es importante destacar que PHP también soporta el método PUT para envío de archivos tal y como lo utiliza Netscape
Composer y el cliente Amaya de W3C. Consulte Soporte del método PUT para más detalles.
Una página de envío de archivos se puede crear mediante un formulario parecido a éste:

Ejemplo. Formulario de envío de archivo

<FORM ENCTYPE="multipart/form-data" ACTION="_URL_" METHOD=POST>
<INPUT TYPE="hidden" name="MAX_FILE_SIZE" value="1000">
Enviar este archivo: <INPUT NAME="userfile" TYPE="file">
<INPUT TYPE="submit" VALUE="Enviar">
</FORM>

La _URL_ debe tener como destino un script PHP. El campo MAX_FILE_SIZE debe encontrarse antes del campo INPUT
y su valor determina el tamaño máximo de archivo que se puede enviar en bytes. Tras la recepción del archivo se definirán
en el script PHP destino las siguientes variables:
• $userfile - El archivo temporal que se ha guardado en el servidor.
• $userfile_name - El nombre original del archivo enviado.
• $userfile_size - El tamaño del archivo recibido.
• $userfile_type - El tipo mime del archivo si el navigador envio esta información. Por ejemplo: "image/gif".
Es importante recordar que la primera palabra "$userfile" de éstas variables corresponde al nombre
("NAME=") del campo "INPUT TYPE=file"del formulario. En el ejemplo anterior usamos "userfile".
Los archivos enviados serán guardados en el directorio temporal por defecto del servidor. Podemos variar este directorio
mediante la variable de entorno TMPDIR en el entorno donde corre PHP. No se puede establecer este valor usando
putenv() desde un script PHP.
El script PHP que recibe el archivo enviado debe implementar las acciones que se deben llevar a cabo con el archivo
acabado de recibir. Por ejemplo se podria utilizar $file_size para decidir descartar los archivos que sean demadiado
pequeños o demasiado grandes. Sean cual sean las acciones a tomar se debe borrar el archivo temporal o moverlo a algún
otro directorio.
El archivo recibido será eliminado inmediatamente del directorio temporal al finalizar el script PHP que lo recibió si no ha
sido movido o renombrado.

Errores comunes

El valor de MAX_FILE_SIZE no puede ser mayor que el tamaño del archivo que se especifica en la variable
upload_max_filesize del archivo PHP3.ini o la correspondiente directiva php3_upload_max_filesize de Apache. Por
defecto es 2 Megabytes.
El servidor CERN parece que elimina cualquier cosa antes del primer espacio en blanco en la cabecera mime content-type
que recibe de los clientes. Mientras esto no varie, CERN httpd no podrá soportar el envío de archivos.

Envío de más de un archivo

Es posible el envio de varios archivos simultáneamente y poder clasificar la información automáticamente por arrays. Esto
de hace de la misma manera en que se organizan por arrays los SELECT o CHECKBOX:
Nota: El soporte para múltiple envios de archivos se añadió en la versión 3.0.10

Ejemplo. Formulario de envío multiple de archivos

<form action="file-upload.
html" method="post" enctype="multipart/form-data">
Enviar estos archivos:<br>
<input name="userfile[]" type="file"><br>
<input name="userfile[]" type="file"><br>
<input type="submit" value="Enviar">
</form>

Cuando el formulario es procesado, los arrays $userfile, $userfile_name, y $userfile_size se crearán de alcance
global (igual que $HTTP_POST_VARS). Cada uno será un array con índice numérico con los valores apropiados para los
archivos enviados.
Por ejemplo, supongamos que los siguientes archivos /home/test/review.html y /home/test/xwp.out son
enviados. En este caso, $userfile_name[0] almacenaría el valor review.html, y $userfile_name[1] almacenaría
el valor xwp.out. Así, $userfile_size[0] almacenaría el tamaño de review.html y así con los valores siguientes.

Soporte del método PUT

PHP soporta el metodo HTTP PUT que usan aplicaciones como Netscape Composer y Amaya de W3C. Las peticiones
PUT son más sencillas que el método POST. Un ejemplo:

PUT /path/filename.html HTTP/1.1

Esto normalmente significaría que el cliente remoto quiere salvar el contenido como: /path/filename.html en tu árbol web.
Lógicamente no una buena idea que la gente pueda escribir en tu árbol web. Para manipular esta petición debes decirle al
servidor que esta petición sea atendida por un script PHP. En Apache, por ejemplo, se utiliza para esto la directiva Script en
los alguno de los archivos de configuración del servidor. Un sitio típico de uso es dentro del bloque <Directory> o
quizás en el bloque <Virtualhost>. Una linia así deberia hacer ésta función:

Script PUT /put.php3

Ésto le dice a Apache que envie todas peticiones PUT para URIs que contengan esta linia al script put.php3. Se asume que
PHP se encuentra activo y con la extension php3 enlazada a él.
Dentro del script put.php3 se podría implementar algo así:

<? copy($PHP_UPLOADED_FILE_NAME,$DOCUMENT_ROOT.$REQUEST_URI); ?>

Esto copiaria el archivo a la localización requerida por el cliente remoto. Aqui se pueden ejecutar funciones de
autentificación de usuario o cualquier otro tipo de chequeo. El archivo se guarda en el archivo temporal del sistema
servidor de la misma manera que el Método POST. Cuando la petición finaliza, el archivo temporal es eliminado. En
consequencia el script dede proceder al trato de éste inmediatamente, ya sea para copiarlo, renombrarlo, etc. El archivo se
encuentra en la variable $PHP_PUT_FILENAME, y el destino sugerido por el cliente en la variable $REQUEST_URI
(puede variar en servidores diferentes de Apache). No es necesario hacer caso al destino sugerido por el cliente. Por
ejemplo se podrían copiar los archivos enviados a directorios especialmente designados para esta tarea.


Anterior:
autentificacion http con php


Siguiente:
conexiones en php

 articulos relacionados
introduccion a php
sintaxis basica de php
comentarios en php
tipos de datos en php
conversion de cadenas en php
arrays en php
declaracion de tipos
variables en php
ambito de las variables
variables externas a php
constantes en php
expresiones en php
operadores aritmeticos, asignacion, incremento, decremento, logicos, cadenas
if , else, elseif en php
while y do while en php
bucle for en php
foreach en php
break y continue en php
switch en php
require en php
include en php
require_once
funciones en php
class: clases en php
manejo de errores en phph
creacion de imagenes gif
autentificacion http con php
envio de archivos
conexiones en php
conexiones persistentes en php



Actualizado: 18/09/2008

Mejor Internet Explorer o

Si has encontrado esta web de tu agrado, ¡ diselo a tus amigos ! Nos ayudas a cubrir gastos si con un simple SMS te bajas a tu movil un logo, un tono o una melodia polifonica desde:

www.gratiszona.com/moviles
www.conmovil.com


¿Quieres LIGAR? Envía un mensaje con la palabra LIGAR.592 al 5511 y comienza a ligar y hacer amigos. ¡ASI DE FACIL!. OJO: no te equivoques al escribir o no funcionara







· ·

 apuntes
   comunicaciones
   javascript
   lenguaje c
   php
 autoayuda
 bolsa
 bricolage
 chistes
 deportes
 email
 empleo
 fotografia digital
 marcas movil
 mascotas
 motor
 moviles
 mp3
 ocio
 pisos
 plantas
 programas
 recetas
 sabiasque
 salud
 thermomix
 tienda
 timos
 trucos
 trucos juegos
 virus y seguridad
 webmaster

Ir a inicio  Añadir a favoritos  recetas de cocina  moviles y juegos
Google