Maestros del Web


Estás en Inicio / Editorial / PHP

26.05.2002

Upload De Archivos Con PHP

Aquí enseñaré cómo subir archivos al servidor por medio de un script de php, proceso es muy simple y sencillo.

UpPara
el correcto aprendizaje utilizaremos un ejemplo, en él que subiremos
un archivo. Este solo puede ser de extencion .zip y ocupar menos de 30 kb, definiendo
así las opciones del upload con php.

Primero empezaremos con el formulario html, encargado de enviar el archivo al servidor.

<form action="subir.php" method="post"
      name="miformu" enctype="multipart/form-data">
      <input name="archivo" type="file">

      </form>

Cómo se daran cuenta, este formulario tiene un parametro nuevo llamado enctype, con
el valor "multipart/form-data", informando que envía datos
y archivos, opción indispensable para el correcto upload del fichero.

También utilizamos un input "file" para que el usuario pueda explorar su respectiva
computadora en busca del archivo a subir.

Suponemos que el script al que enviamos el formulario y el encargado de procesarlo se
llama subir.php. A continuación explicare el contenido y funcionamiento
de este archivo.

Cómo vimos en el formulario, el campo de archivo se llama archivo:

<input name="archivo"
        type="file">

De acuerdo a este nombre sera que trabajaremos en el lado del servidor, osea en
el script.

El archivo se guarda en la carpeta temporal del servidor, dato que hay que tenerlo
en cuenta ya que no todos los servidores cuentan con esta opción y ponen
el tamaño de dicha carpeta a 0, imposibilitando subir archivos.

Para referirnos al archivo en el script lo hacemos por medio de:

$archivo

Otras propiedades que tendremos a nuestra disposicion es el tamaño (en bytes)
y el nombre del archivo.

$archivo_name
- Nombre del archivo (ej: instaladores.zip, miarchivo.zip)

$archivo_size - Tamaño
del archivo en bytes (si son 10kb serian 10000 bytes)

Nota: A este
punto cuándo nos referimos al archivo lo hacemos siempre con $archivo, debido
a que en el formulario lo denominamos de esta forma (<input name="archivo" type="file">).

La explicacion la hago suponiendo un conocimiento básico de php por parte
del lector.

Primero mostrare el script, luego explicare linea por linea el script:

<?php
	//formulario de upload por jorge luis martinez
	//http://miscodigos.jlmnetwork.com/
	$extension = explode(".",$archivo_name);
	$num = count($extension)-1;
	if($extension[$num] == "zip")
		{
		if($archivo_size < 30000)
		{
		if(!copy($archivo, "archivos/".$archivo_name)
		{
		echo "error al copiar el archivo";
		}
		else
		{
		echo "archivo subido con exito";
		}
		}
		else
		{
		echo "el archivo supera los 30kb";
		}
		}
		else
		{
		echo "el formato de archivo no es valido, solo .zip";
		}
?>

Lo primero que haremos sera comprobar que la extencion del archivo es la permitida
(.zip).

Para ello utilizamos la funcion de php explode, la cual guardará en un array el nombre del archivo segun el primer parametro (el punto):

$extension = explode(".",$archivo_name); 

Para mejor entendimiento, si el archivo se llama ficheros.zip el explode pondria
en este caso en la variable $extencion el nombre en dos partes:

$extension[0] y $extension[1]

los cuales contienen:

$extension[0] --> "ficheros"

$extension[1] --> "zip"

Ahora obtendremos la longitud del array, en este caso seria de 2 (ya que contiene
2 elementos "ficheros" y "zip"), a ese numero le mermamos
1 y lo asignamos a una variable llamada $num:

$num = count($extension)-1;

Nota: Le hemos mermado 1 a la longitud por que cuando queramos llamar al array $extension[$num]
debemos de hacerlo teniendo en cuenta que los elementos van desde 0, por lo
que aunque contenga 2 elementos no podemos llamar al segundo con $extension[2],
si no que tenemos que llamarlo por su posicion $extencion[1].

Ahora haremos el condicional. Si la extencion del archivo es zip continuaremos con
el proceso de upload, de lo contrario mostraremos mensaje de error.

if($extension[$num] == "zip")
{
...
}
else
{
echo "el formato de archivo no es valido, solo .zip";
}

Ahora, continuaremos con el upload, suponiendo que el archivo era el correcto.

Lo siguiente a hacer es comprobar el tamaño del archivo; para ello utilizaremos
la variable antes mencionada $archivo_size. Si el tamaño
es menor a los 30kb (recuerde, debe especificarlo en bytes, por lo que serian
30000) continuaremos con el upload, de lo contrario mostraremos un mensaje de
error:

if($archivo_size < 30000)
{
...
}
else
{
echo "el archivo supera los 30kb";
}

Ahora, continuaremos con el upload, suponiendo que el tamaño del archivo es
correcto.

Utilizaremos la función copy() de php, la cual copiara el archivo
a la carpeta que especifiquemos.

Nota: El archivo que hemos subido por medio del formulario se guarda en la carpeta temporal del
servidor y se accede a él por medio de la variable $archivo, este archivo
será borrado de la carpeta temporal cuando el script finalize su ejecución,
este proceso es automatico y lo realiza el servidor, usted no tiene que preocuparse
por este aspecto.

En este caso copiaremos el archivo a una carpeta del servidor llamada archivos.
Notese que la ruta de copiado debe de ser relativa, no absoluta, y es relativa
al script. Osea, si el script se ejecuta en:

http://www.servidor.net/cuenta/carpeta/subir.php

La funcion en este caso intentara copiarlo a:

http://www.servidor.net/cuenta/carpeta/archivos/

Lo hemos puesto en un if y con signo de negación (!),
para que en caso de no poder copiar el archivo nos salga mensaje de error:

if(!copy($archivo, "archivos/".$archivo_name))
{
echo "error al copiar el archivo";
}
else
{
echo "archivo subido con exito";
}

En este caso el archivo ha sido copiado a la carpeta archivos y con el mismo nombre
que tenía, osea, si el archivo se llamaba "ficheros.zip",
el archivo ha quedado en la carpeta con el mismo nombre "archivos/ficheros.zip".

Notese que esto no es obligatorio, y podemos ponerle el nombre que queramos, si hubieramos
querido que el archivo se llamara "jlmm.zip", simplemente
pondriamos en el copy() lo siguiente:

copy($archivo, "archivos/jlmm.zip")

Bien, espero haya quedado claro, y espero tus comentarios.

Suerte y hasta el proximo tutorial!

Califica esta nota:

1 estrella2 estrellas3 estrellas4 estrellas5 estrellas (22 votos, promedio: 4.23 de 5)
Loading ... Loading ...

Sobre el autor

Jorge Luis Martinez M
Encargado del sitio de Mis códigos en Jlmnetwork.com

Si eres nuevo en Maestros del Web y te agradan nuestras publicaciones, te invitamos a suscribirte a nuestro Feed.

Sindícanos en: Google Reader, Bloglines, My Yahoo o My MSN | ¿Qué es el Feed?

Comentarios

227 comentarios en total.

Páginas: [1] 2 3 »

  1. Unregistered 18.01.2003 - 02:22 - # edit

    no quiero incluir texto.. solo quiero decir que me parece excelente :)

  2. Unregistered 18.01.2003 - 02:23 - # edit

    algo lioso para conbinar con tu codigo, pero muy bien explicado.

  3. cristiang 18.01.2003 - 02:24 - # edit

    felicidades, pero me gustaria saber como se gestionaria algo paresido a los egroups de yahoo con los archivos y todo…porcierto el error que tiene es solo un parentesis al final del if…espero me puedan ayudar

  4. Unregistered 18.01.2003 - 02:24 - # edit

    Muy bueno, pero en el script la propiedad $archivo_name aparece con mayuscula ($Archivo_name) . Gracias por su ayuda.

  5. Unregistered 18.01.2003 - 02:24 - # edit

    Un artículo muy bueno, hacía tiempo que buscaba esta función y nunca había encontrado una explicación tan clara y sencilla. Me gustaría saber si es posible mostrar el contenido de una carpeta con un script php. Si alguien sabe como le agradecería que me enviara la respuesta a: speedweb@airtel.net GRACIAS.

  6. Unregistered 18.01.2003 - 02:25 - # edit

    hola a todos
    pero esto como convina la seguridad es seguro?????

  7. LOG 18.01.2003 - 02:25 - # edit

    Solo quisiera saber si tambien lo puedo utilizar para imagenes ok

  8. Cluster 27.01.2003 - 14:29 - # edit

    Como “tutorial” de lo que describe el código está bien .. Pero ya ha quedado un poco desfasado .. ademas que plantea algunos problemas:

    1) Asume como globales todas las variables .. Es decir, no funciona este script de Upload en sistemas con register_globals a OFF ..

    Solución:
    Usar el array asociado $_FILES (disponible para PHP >= 4.1.x) .. Sería cambiar las llamadas tipo:

    $Archivo_name .. $Archivo_size .. y los que use similar a:
    $_FILES['Archivo']['name'] .. etc ..

    De esta forma sería mas seguro el “Upload” .. ademas que funcionará con la directiva de PHP indicada a ON o a OFF .. siendo recomendable usarlo a OFF …

    2) usando copy() para mover el archivo que se ha subido al servidor plantea un error de acceso (permisos) en configuraciones de PHP como CGI y algunas otras mas restrictivas. Ademas .. deja el archivo orien en el directorio temporal de nuestro servidor a la espera que por otro médio lo borremos …

    Solución:
    Usar en vez de copy() —> move_uploaded_file()

    3) .. La extensión del archivo lo obtiene desglosando el nombre del Archivo que se sube y obteniendo su .extension … Así como está no detectaría nombres de archivos tipo config.inc.php .. correctamente.

    Por otro lado .. el formato exacto del Archivo es solo “aproximado” y creyendo en la buena voluntad del que lo subió .. (podria cambiar la extension de un .exe a un .txt y el sistema nos diria q es un “texto” …)

    Solución:
    Via: $_FILES['Archivo']['type'] .. obtenemos el formato MIME del archivo que subimos .. del tipo categoria/detalle :

    text/plain .. para un .txt comun …
    image/gif .. jpg .. png .. para imagenes en estos formatos ..
    application/zip .. Para los zip …

    (mas formatos MIME en: http://www.isi.edu/in-notes/iana/assignments/media-types/media-types )

    Esto es realmente util usarlo si por otro medio nos guardamos el “tipo” de archivo que es (para tal vez envialo como cabeceras HTTP al navegador).

    Un saludo,

  9. Cluster 27.02.2003 - 21:21 - # edit

    sini

    Tendrias que ver la configuración de tu servidor .. (en un php.ini o en un phpinfo() …)

    Puede ser que tengas desactivada el upload o que no tengas configurado el directorio temporal donde PHP guarda lo que subes via HTTP ..

    De todas formas .. revisalo y aquí mismo en forosdelweb.com en el foro PHP puedes hacer tus preguntas si nos indicas que estas usando esté código y los detalles de configuración de tu servidor (de PHP) como:

    ;;;;;;;;;;;;;;;;
    ; File Uploads ;
    ;;;;;;;;;;;;;;;;

    ; Whether to allow HTTP file uploads.
    file_uploads = On (que no esté a OFF porsupuesto)

    ; Temporary directory for HTTP uploaded files (will use system default if not
    ; specified).
    upload_tmp_dir = alguna ruta . no “no value”

    ; Maximum allowed size for uploaded files.
    upload_max_filesize = 2M ( que sea algun valor M = Megabyte)

    Creo q estas cosas deberia indicarlas un buen manual sobre el tema .. En muchos casos que funcione o no .. depende de muchaaa configuración de PHP . habría que hacer mención a estos detalles.

    Un saludo,

  10. Tukzone 06.03.2003 - 16:12 - # edit

    Buenisimo el tutorial :arriba:

  11. Eztopa 24.04.2003 - 19:15 - # edit

    Ahora solo hace falta uno para mandar por php un archivo a un email

  12. trabado 13.06.2003 - 07:03 - # edit

    no esta mal

  13. Indira 20.06.2003 - 16:44 - # edit

    Me parece que un buen tutorial

  14. Cluster 23.06.2003 - 00:12 - # edit

    Eztopa …

    Para eso usa alguna classe para tal fin .. ejemplo:

    PHP Mailer
    http://phpmailer.sourceforge.net

    Te permite enviar e-mails multiparte (HTML y texto plano) ademas de enviar archivos adjuntos (attachments) sin problemas e incluso imagenes incrustados en tus mails HTML .. Y para “rematarlo” .. puede usar mail() de PHP, SMPT directo y sendmail o el MTA que se use en el servidor directo.

    Un saludo,

  15. cvander 23.06.2003 - 01:24 - # edit

    Muy buenos tips los que has incluido Cluster. En especial la parte del safe_mode que me estaba causando problemas al implementarlo.

    Un saludo.

  16. carlos 23.06.2003 - 08:50 - # edit

    Muy bueno

  17. jrbscorpion 11.07.2003 - 09:00 - # edit

    Saludos, a mi me funciona bien, sube los archivos a mi servidor, es solo que me marca un error de un max de 30 seg al subir, en lugar de mostrarme que el archivo a sido subido con éxito, cuando me muestra este mensaje del error, checo mi servidor y efectivamente subio el archivo, y este esta integro…espero pudieran ayudarme…mil gracias

  18. Cluster 11.07.2003 - 23:17 - # edit

    jrbscorpion

    Si tu servidor te lo permite .. usa:

    [php]set_time_limit(1200);[/PHP]

    Al principio del script … Eso ajusta el tiempo de ejecución de ese script en concreto. El valor va expresado en segundos. 0 (cero) indicaría “tarde lo que tarde en ejecutarse” .. NO es recomendable usalo así (a cero) .. en su defecto dá tiempos largos (creo q con 1200:60=20 minutos va bien . no?)

    Un saludo,

  19. ivan 22.07.2003 - 08:42 - # edit

    que es los medios externos del navegador

  20. Yésica 23.07.2003 - 09:21 - # edit

    Muy bueno, gracias por ayudarnos a solucionar nuestros problemas

  21. jrbscorpion 28.07.2003 - 18:39 - # edit

    Gracias Cluster, en verdad que la ayuda aqui brindada es excelente, me sirvio, mil gracias estamos en contacto. Si te interesa que difunda tu foro por medio de mi estacion de radio por internet escribeme a jrbscorpion@radiofussionexplosiva.com

  22. Unregistered 07.08.2003 - 15:29 - # edit

    Hola, el tutorial me parecio muy bueno, pero no puedo hacer funcionar el upload.
    el codigo lo he modificado para mis necesidades y nunca me sube el archivo al servidor, uso apache y ya revise que todo este configurado ok (upload=on, tempdir configurado y size tambien)
    el codigo es el siguiente, espero me puedan ayudar a corregirlo
    < ?
    //set_time_limit(1200);
    echo “Nombre: “.$nombre=$_FILES['archivo']['name'];
    echo “
    “;
    echo “Tamaño: “.$tamano=$_FILES['archivo']['size'];
    echo “
    “;
    echo “Archivo Temporal: “.$_FILES['archivo']['tmp_name'];
    echo “
    “;

    $extension = explode(”.”,$nombre);
    $num = count($extension)-1;

    if($extension[$num] == “gif” || $extension[$num] == “GIF”)
    {
    if($tamano < 100000)
    {
    if(!move_uploaded_file($_FILES['archivo']['tmp_name'], “Imagenes/”))
    {
    echo “error al copiar el archivo”;
    }
    else
    {
    echo “archivo subido con exito”;
    }
    }
    else
    {
    echo “el archivo supera los 100kb”;
    }
    }
    else
    {
    echo “el formato de archivo no es valido, solo .gif”;
    }

    ?>

    cuando ejecuto me sale este error por ejemplo

    Nombre: chino.GIF
    Tamaño: 1126
    Archivo Temporal: C:\PHP\uploadtemp\php15C.tmp
    error al copiar el archivo

    ahora nunca he visto que el archivo llegue a subir ni al temp, es mas no se en que parte del codigo el archivo es subido al temp, solo veo que lo mueve desde el temp al directorio que yo quiero.

    Esta de mas decir que solo llevo 2 dias programando con php pero es algo que me han solicitado hacer y todavia no puedo resolver este problema.
    gracias a los que me puedan ayudar

    saludos

    Carlos

    Nota : no se si sea necesario pero aca esta el formulario

  23. Miguel Gutiérrez 09.08.2003 - 18:57 - # edit

    Pero nosé que pasa con mi sitio en el servidor de http://www.tripod.lycos.es.
    me muestra el sigiente Error:

    Parse error: parse error in /data/members/free/tripod/es/r/e/a/realizador/htdocs/archivos.php on line 97

    /*estas son las lineas 96 en adelante
    if(!copy($archivo, “archivos/”.$Archivo_name)
    {
    */

  24. Unregistered 19.08.2003 - 13:37 - # edit

    Hola, tengo el mismo problema con el upload de archivos, la configuracion del php esta correcta pero no sube el fichera al servidor, por favor ayudemne que esto es muy importante para mi

    graicas anticipadas

  25. libiob 22.08.2003 - 16:28 - # edit

    Igual me sucede, sera el PHP? no creo, que dicen nuestros amigos expertor gracias de antemano tambien por la respuesta.

  26. z7archangel7z 26.08.2003 - 08:09 - # edit

    WOW!!!!!!!! ke manual!!!!!!!! eres un genio!!!!!

  27. Unregistered 26.08.2003 - 09:38 - # edit

    kieres ke te solucione la vida o ke pedo? no mames!!!!

    jajajaja ok entra esta pagina el codigo esta mejor explicado:

    http://webexperto.com/articulos/articulo.php?cod=149

  28. Patricio 26.08.2003 - 10:17 - # edit

    muy bueno, me es de muchisima utilidad, te agradezco que te preocupes por nosotros los webmaster, que aveces necesitamos intercambiar conceptos. Un abrazo Patricio

  29. patricia 28.08.2003 - 06:38 - # edit

    Realmente muy claro!
    Muchas gracias por hacer tutoriales como este para los q recien empiezan y mucho no entienden…
    ya q siempre estan los q recien empiezan y a veces hay tutoriales q los lees y es como q ya tendrias q saber ciertas cosas…
    Muchas gracias!
    Un saludo,

  30. eaguilac 28.08.2003 - 14:02 - # edit

    Hey y que pasa cuando en un formulario tengo otros campos, ademas del archivo que quiero subir ??
    Tengo uno y no me esta funcionando cuando lleva mas campos.

    AYUDA PLEASE

  31. luis 01.09.2003 - 10:03 - # edit

    bueno, esta fuerte y claro

  32. funk 01.09.2003 - 15:38 - # edit

    muy bien explicado

  33. Nigeon 02.09.2003 - 05:07 - # edit

    …No lo consigo

  34. Alberto 15.09.2003 - 08:56 - # edit

    Npo me funciona

  35. Joto 22.09.2003 - 18:52 - # edit

    es una porqueria y no tiene lo que necesito

  36. adriana 01.10.2003 - 07:08 - # edit

    se me hizo un poco interesante pero para lo que yo necesitaba no me sirvio de mucha ayuda. Sigan mejorando.

  37. kike 18.10.2003 - 10:17 - # edit

    Si el servidor no acepta subir archivos, se puede subir un archivo utilizando por ejemplo ftp://usuario:contraseña@sitio.com

  38. Cluster 18.10.2003 - 21:38 - # edit

    Srs … (y Sras.. ) ..

    En lugar de decir cosas como “no es lo que buscaba” .. DIGAN!!! que es lo que necesitan .. Tal vez el autor lo lea y edite otro tutorial con sus requerimientos.

    De todas formas, piensen que los TUTORIALES son para que uno entienda el concepto básico (en este caso “subir” las imagenes al servidor) .. La aplicación que le dé final .. es cosa de cada uno.

    Si desean scripts de”upload” de archivos visiten sitios como hotscripts.com y busquen algo que se les acomode ..

    Un saludo,

  39. wilder 20.10.2003 - 09:47 - # edit

    hola, yo tengo la misma necesidad pero necesito subir archivos .xls(excel), si puedes ayudarme te lo agradeceria muchisimo

  40. fredy 24.10.2003 - 20:40 - # edit

    que bueno son estos tutoriales exelente esplicacion sigan mostrando mas informacion sobre php y maysql

  41. Joseph Chavarria 27.10.2003 - 16:17 - # edit

    ok, esto ya lo entendi bien , pero que pasaria si necesito subir una imagen a una base de datos mysql, el script seria de la misma manera o tengo que hacer otra cosa para almacenarla en la base de datos ?, por otro lado , si fueran mas de 10,000 imagenes para subir, que seria lo mas recomendable , guardar la ruta donde las estoy guardando o como ?
    gracias

  42. wilder 31.10.2003 - 09:40 - # edit

    hola esta muy bueno, si pudieras ayudarme, yo quisiera subir varios archivos a la vez al servidor…

  43. Unregistered 04.11.2003 - 11:51 - # edit

    no sirve, ademas se deja muchas explicasiones en el aire

  44. Oswos 04.11.2003 - 15:21 - # edit

    Muy Claro, Gracias!

  45. neoanderson 06.11.2003 - 17:04 - # edit

    Y el usuario y contraseña?? donde los pongo de lo contrario no podre subir los archivos a mi server

  46. Unregistered 07.11.2003 - 13:24 - # edit

    Hola !!
    Mi problema es el siguiente:
    Tengo ya hecha la forma y mando correos con la funcion mail() de PHP pero ahora necesito ke se le puedan adjuntar mensajes y mandarlos junto con el correo.

    Espero que se comprenda mi problema y tenga una respuesta GRACIAS !!

  47. Arturo 11.11.2003 - 11:54 - # edit

    es muy buneno este progama pero yo tengo un problema en particular
    Necesito mandar datos adjuntos mediante la funcion mail() de php
    Ya tengo funcionando la aplicacion pero no manda adjuntos y necesito ke lo haga
    Si pueden decirme como hacerlo lo agredecere

  48. Unregistered 14.11.2003 - 17:42 - # edit

    muy buen PHP

  49. titipower 18.11.2003 - 14:19 - # edit

    Me ha ayudado!!!
    asias tronk!

  50. jaime 27.11.2003 - 15:48 - # edit

    1. hola, he estado investigando sobre subir archivo al servidor usando PHP. Pero me pregunto porque este script no utiliza la funcion FTP_PHP como seria lógico; ya que me estoy conectando al servidor?
    2. En otra pagina lei sobre usar la funcion FTP_PHP, para subir archivos al servidor:

    $ftp_ip = “el ip”;
    $ftp_login = “login”;
    $ftp_password =”clave”;
    $conn_id = ftp_connect($ftp_ip);
    // login con su user y password FTP
    $login_result = @ftp_login($conn_id,$ftp_login,$ftp_password);
    $upload = ftp_put($conn_id,”datos.txt”, $archivo_temp , FTP_BINARY);

    todo me funciona bien, pero cuando reviso en el servidor, el archivo esta vacio, alguien me podria decir a q se debe?

    saludos

  51. jaime 27.11.2003 - 16:46 - # edit

    Hola de nuevo
    ¿En que caso podria dar el error al copiar el archivo? a mi me manda ese mensaje

  52. Unregistered 04.12.2003 - 08:47 - # edit

    Por que no nos mandas un ejemplo como el anterior, pero con todas las modificaciones que mencionas, te lo agradeceria muchisimo y seguro q varios tambien ok?
    gracias

    ———————————-

    Mensaje Original por Cluster
    Como “tutorial” de lo que describe el código está bien .. Pero ya ha quedado un poco desfasado .. ademas que plantea algunos problemas:

    1) Asume como globales todas las variables .. Es decir, no funciona este script de Upload en sistemas con register_globals a OFF ..

    Solución:
    Usar el array asociado $_FILES (disponible para PHP >= 4.1.x) .. Sería cambiar las llamadas tipo:

    $Archivo_name .. $Archivo_size .. y los que use similar a:
    $_FILES['Archivo']['name'] .. etc ..

    De esta forma sería mas seguro el “Upload” .. ademas que funcionará con la directiva de PHP indicada a ON o a OFF .. siendo recomendable usarlo a OFF …

    2) usando copy() para mover el archivo que se ha subido al servidor plantea un error de acceso (permisos) en configuraciones de PHP como CGI y algunas otras mas restrictivas. Ademas .. deja el archivo orien en el directorio temporal de nuestro servidor a la espera que por otro médio lo borremos …

    Solución:
    Usar en vez de copy() —> move_uploaded_file()

    3) .. La extensión del archivo lo obtiene desglosando el nombre del Archivo que se sube y obteniendo su .extension … Así como está no detectaría nombres de archivos tipo config.inc.php .. correctamente.

    Por otro lado .. el formato exacto del Archivo es solo “aproximado” y creyendo en la buena voluntad del que lo subió .. (podria cambiar la extension de un .exe a un .txt y el sistema nos diria q es un “texto” …)

    Solución:
    Via: $_FILES['Archivo']['type'] .. obtenemos el formato MIME del archivo que subimos .. del tipo categoria/detalle :

    text/plain .. para un .txt comun …
    image/gif .. jpg .. png .. para imagenes en estos formatos ..
    application/zip .. Para los zip …

    (mas formatos MIME en: http://www.isi.edu/in-notes/iana/assignments/media-types/media-types )

    Esto es realmente util usarlo si por otro medio nos guardamos el “tipo” de archivo que es (para tal vez envialo como cabeceras HTTP al navegador).

    Un saludo,

  53. Elena 04.12.2003 - 08:49 - # edit

    tengo error en el copy, esta bien que Archivo_name vaya con mayuscula?, porque?

  54. ariel 06.12.2003 - 17:04 - # edit

    es bacan tu articulo

  55. pio 27.12.2003 - 12:13 - # edit

    buen articulo
    pero seria bueno tener mas ejemplos.

  56. Unregistered 05.01.2004 - 14:17 - # edit

    canda ver inteto hacer me sale este error
    Warning: Unable to create ‘ade.JPG’: Permission denied in /home/iramos/public_html/subearchivo.php on line 14

    Warning: Unable to move ‘/tmp/phpUSJq78′ to ‘ade.JPG’ in /home/iramos/public_html/subearchivo.php on line 14
    Ocurrió algún error al subir el fichero. No pudo guardarse.

    que significa y que puedo hacer.

  57. fernando 07.01.2004 - 02:06 - # edit

    utilice el codigo pero me da el siguente error Parse error: parse error, unexpected ‘{’ in d:\sitiosphp\nicron\subir.php on line 9
    alguien sabe porque pasa esto

  58. Unregistered 07.01.2004 - 13:17 - # edit

    Alguien podria ayudarme por favor me inicio en PHP y el codigo no me funciona tengo el register_global en On y nada.. me aparece lo siguiente :

    Notice: Undefined index: archivo in c:\inetpub\wwwroot\php\noticias\agrega.php on line 8

    y la linea de programacion es esta :

    $arch = $HTTP_POST_VARS["archivo"];

    y viene del siguiente formulario :

    es un script simple pero no se en que me caigo…

    agradecido.

    PABLICIO

  59. Cluster 07.01.2004 - 15:53 - # edit

    Unregistered 04-12-2003 11:47 AM

    En php.net tienes un ejemplo completo, también en las FAQ’s del foro PHP de forosdelweb.com

    Te dejo links:

    El manual oficial de PHP sección “upload HTTP”:
    http://www.php.net/manual/en/features.file-upload.php
    (incluye las técnicas de multiple upload que preguntan algunos y las directivas de configuración de PHP que ha de tener habilitadas).

    FAQ’s foro PHP:
    (para archivos múltiples .. usa $HTTP_POST_FILES hay otra FAQ más sobre el tema .. pero usa variables globales como este tutorial).
    http://www.forosdelweb.com/showthread.php?postid=296636#post296636

    Un saludo,

  60. lila104 22.01.2004 - 07:49 - # edit

    Hola! Primero de todo enorabuena por tu artículo, ya q he estado mirando por todo internet y ha sido el mejor que he encontrado. Soy un poco novata con php. He provado el script, y me da error en la función copy y no logro averiguar porque. Te agradeceria si me pudieras decir algo. Ya se que no soy muy explicita, pero es q estoy un poco perdida. Gracias

  61. Unregistered 22.01.2004 - 07:52 - # edit

    Soy lila104
    Lo siento, pero he respondido al artículo sin ver antes el foro, me he precipitado….

  62. mauro 29.01.2004 - 15:48 - # edit

    gracias!! esta bien claro

  63. Unregistered 05.02.2004 - 14:35 - # edit

    tengo un problemita nose ke pueda ser o si es problema de configuracion de php pero las propiedasdes name y size no me funcionan es decir
    $archivo_name
    $archivo_size

    no me estan funcionando sera alguna idiotes de mi parte o algo ke alguien le haya pasaso y solucionado?
    gracias de antemano

  64. Cluster 06.02.2004 - 07:28 - # edit

    Si usas register_globals a OFF .. las propiedades de un archivo que sube por “Upload HTTP” están en los arrays asociados $_FILES['archivo']['propiedad'] .. (Si revisas los comentarios de este mensaje verás que yo mismo he hablado sobre ese tema) ..

    Un saludo,

  65. Unregistered 09.02.2004 - 16:47 - # edit

    gracias por la respuesta… pero nada que me funciona es decir, tengo las register_globals on y las propiedades name y size no me contienen nada, los arrays ya los probe y pasa exactamente = si le digo que me imprima el archivo sin ninguna propiedad especifica me muestra la ruta completa de el mismo pero las propiedades no me contiene nada quesiera saber si ademas de las configuraciones para subir archivos de php.ini hay algo que me pueda estar afectando me lei todas los treads y nada. pues nose si algunas configuraciones en el apache afecten esto.

    de antemano muchas muchas pero muchas gracias

    saludos

    PD: toy casi seguro ke es algo de configuracion antes habia trabajado con subidas de archivos y me funcionaba cambie mi version de php por la ke usan en el server donde hospedo las paginas y no tener problemas. de nuevo gracias

  66. Unregistered 09.02.2004 - 17:02 - # edit

    aclaro el PD sorry me equivoque al final la version que tenia era 4.3.2 pero cambie a a la misma del server y empesaron los problemas no en el server sino en mi maquina

  67. Paco 09.02.2004 - 19:44 - # edit

    Muy claro el asunto. Saludos.

  68. franklin 12.02.2004 - 10:41 - # edit

    Amigo me sirvio 100% Gracias

  69. Unregistered 18.02.2004 - 10:53 - # edit

    muy bueno, pero me gustaria que alguien me dijera si hay posibilidad de crear una carpeta mediante php,lo digo pq no me gustaria mezclar los archivos de distintos usuarios que los suban al Servidor.Muchas gracias.

  70. david-SM 24.02.2004 - 07:07 - # edit

    mira si se pueden crear carpetas utilizando codigo php
    solo tienes que utilizar las instrucciones o comandos de DOS y funcionan igual:

    mkdir(’path’, permiso);
    ejemplo (’C:\nuevaCarpeta’, 0700);

    suponiendo que ya esxiste el directorio entonces te quedaria asi
    $path= “C:/nuevaCarpeta/nombrenuevoDirectorio/”;
    mkdir ($path, 0700);

    y se creara dentro de nueva carpeta el directorio ‘nombrenuevodirectorio’;

  71. Manu 24.02.2004 - 20:56 - # edit

    muy buen manual… los felicito…

  72. zak 10.03.2004 - 14:55 - # edit

    chabon, sos un capo….recien me meto a programar en php, por suerte tengo algo de base de “c” ke me resulta muy familiar eesto. Esta muy bien explicado, felicitaciones. hay algun texto mas tuyo por aca??
    salu3
    ZAK

  73. Unregistered 12.03.2004 - 14:33 - # edit

    un programa para descargar archivos PHP

    licestebansosareyes@hotmail.com

  74. david 23.03.2004 - 11:47 - # edit

    buen tutorial,muy bien estructurado y comentado. Me ha servido de mucha ayuda.

    Enhorabuena Jorge

  75. Berna 07.04.2004 - 08:46 - # edit

    Esta muy bueno eso, pero tengo un pequeño problema quiero subir varios archivos a la vez como le hago??
    Haber si me pueden ayudar

  76. Unregistered 07.04.2004 - 09:21 - # edit

    Realmente el código si funciona pero tengo una duda yo tengo Red Hat 9.0 y quiero subir archivos de mas de 2 Mb ya cambie todas las configuraciones enel php.ini pero sin embargo no funciona. Si alguien puede ayudarme se lo agradecería seg_remache@hotmail.com

  77. LordCat 07.04.2004 - 13:10 - # edit

    Muy bueno. Me gustaria que tambien pongan un script que funcione con el safe mode prendido, que trabaje con ftp en vez de la funcion copy()

  78. deymuss 09.04.2004 - 18:19 - # edit

    Se te olvidó el boton de subir el archivo, ya que solo está incluido el boton Examinar.
    Gracias

  79. Unregistered 11.04.2004 - 11:42 - # edit

    pues si esto es uno de los manuales mas bien explicados … miedo tengo de los demas :/

  80. Unregistered 15.04.2004 - 23:57 - # edit

    Warning: move_uploaded_file(avatar/avatar.gif): failed to open stream: Permission denied in /home/adcsite/public_html/amodavatar.php on line 36

    Warning: move_uploaded_file(): Unable to move ‘/tmp/phpfvEoSe’ to ‘avatar/avatar.gif’ in /home/adcsite/public_html/amodavatar.php on line 36

    :::::::::::::::

    me sale este error me podrian ayudar o decirme como lo soluciono :D muchas gracias de antemano

  81. ro0x 22.04.2004 - 17:03 - # edit

    y los permisos??

  82. Unregistered 22.04.2004 - 23:33 - # edit

    El tutorial es buenisimo pero habria alguna forma de que el nombre del archivo fuera autonumerico y pasara una variable pasa ser guardado en una tabla mysql? si alguin lo sabe pido por favor me lo informen atx_forever@yahoo.com.ar
    saludos

  83. david-SM 23.04.2004 - 06:08 - # edit

    Si deseas subir varios archivos a la vez solo tienes que manejar el textfile como un vector, aqui tienes un ejemplo

    Principal:

    Para cargar o Adjuntar Imagenes y otros archivos

    Imagen 1:

    Imagen 2:

    Imagen 1:

    Imagen 2:

    **************************************************
    //GuardarArchivo.php

    for ($i=0; $i < = 10; $i++){
    $archivo_name= $HTTP_POST_FILES['archivo']['name'][$i];
    $archivo_size= $HTTP_POST_FILES['archivo']['size'][$i];
    $archivo_type= $HTTP_POST_FILES['archivo']['type'][$i];
    $archivo= $HTTP_POST_FILES['archivo']['tmp_name'][$i];
    echo “
    $archivo_name“;
    echo “
    $archivo_type“;
    if ($i==0 && $archivo_name !=”")
    {
    echo “paso”;
    $dir_uniA = $dir_uniA.$archivo_name;
    }
    //$archivo_type == “htm”
    if ( $archivo_type == “htm” || $archivo_type == “text/html”)
    {
    echo “El archvo es html”;
    echo $archivo_type;
    if (copy ($archivo, $path.$archivo_name))
    {
    $confirmar1 =”transferido el archivo”+ “$archivo_name”;
    echo “

    $confirmar1

    “;
    $confirmar2 =”Su+tamaño+es:+$archivo_size+bytes”;
    echo “
    $confirmar2
    “;
    echo “

    “;
    }
    }

    if (($archivo != “none”))
    {}
    else
    { $error1 = “No+ha+podido+transferirse+el+fichero”;
    echo “

    $error1

    “;
    $error2 = “su+tamaño+no+puede+exceder+de+$archivo+bytes”;
    echo “

    $error2“;
    header(”Location: ../Tutorial/ErrorIngresarArchivo.htm?e1=$error1&e2=$error2″);
    }
    }

    Espero que les sirva este ejemplo….

  84. Unregistered 27.04.2004 - 18:41 - # edit

    Para quienes el script les da este error:

    Warning: move_uploaded_file(avatar/avatar.gif): failed to open stream: Permission denied in /home/adcsite/public_html/amodavatar.php on line 36

    Warning: move_uploaded_file(): Unable to move ‘/tmp/phpfvEoSe’ to ‘avatar/avatar.gif’ in /home/adcsite/public_html/amodavatar.php on line 36

    El problema es que la carpeta a la que intentan mover sus archivos no tiene permiso de escritura a “Otros”. Esto se puede cambiar en el soporte de su cuenta FTP o bien con el comando chmod() de PHP. Esto último lo estoy estudiando todavía, pero me imagino que se puede agregar unas líneas para que el script controle si la carpeta está protegida y cambiar los permisos.

  85. Unregistered 28.04.2004 - 10:54 - # edit

    Vle callampa este manual no puedo subir archivos de mas de unos 500 kb php version 4.2.2 - linux 9 - apache- tengo configurado a 8 m toda la guea y nada

  86. david-SM 30.04.2004 - 10:03 - # edit

    debes asegurarte de colocar en el php.ini

    upload_max_filesize = 8M

  87. Gabriel 02.05.2004 - 15:04 - # edit

    El script está bien diseñado, pero no funciona correctamente! No puede encontrar en ningín caso el archivo de origen. Dice que el archivo (Y el nombre que muestra existe) no lo puede encontrar y produce un error.

    Gabriel - geq@cqsoft.com.ar

  88. Cluster 02.05.2004 - 15:55 - # edit

    Mensaje Original por Unregistered
    Vle callampa este manual no puedo subir archivos de mas de unos 500 kb php version 4.2.2 - linux 9 - apache- tengo configurado a 8 m toda la guea y nada

    No sólo PHP en su configuración (php.ini):

    upload_max_filesize
    post_max_size
    (si no me equico)

    Restringe el tamaño del archivo a subir por médio de PHP vía HTTP.

    El servidor HTTP en sí también restringe el tamaño del archivo y eso lo hace en su configuración ( php.conf al parecer ) bajo la directiva:

    LimitRequestBody

    (esto debería explicarlo en el tutorial si no lo hace ya .. por qué por ahí vienen algunos problemas junto con los problemas típicos sobre permisos de directorios o un mínimo de configuración “a revisar” de PHP para que sepamos que va a funcionar el tema del “upload” de archivos ..)

    mas información y lectura -obligada-:
    http://www.php.net/manual/en/features.file-upload.php

    Fijesen en el comentario de:
    travis dot lewis at amd dot com
    04-Dec-2002 02:58
    Sobre el tema de dicha limitación.

    Un saludo,

  89. david-SM 03.05.2004 - 06:48 - # edit

    hola Gabriela,

    Queria informarles que hay un pequeño detalle en el codigo que deben acomodar es que el archivo GuardarArchivos.php debe estar en el mismo directorio que el archivo CargarArchivos.php (o .htm es lo mismo), en dado caso en el ACTION del formulario se debe indicar es asi:

    ACTION:GuardarArchivo.php ………y no ../GuardarArchivo.php

    Espero que eso te sirva, quizas ese sea el archivo que te dice que no encuentra..

  90. javierdh 05.05.2004 - 17:17 - # edit

    ¿y como le harias para darle un valor inicial a la etiqueta file?, por que yo valido otros datos en la misma pagina y quiero que el archivo que escogi no desaparezca al volver a cargar la pagina, por ejemplo
    ” name=”txtNombre”>

  91. HOR@CIO 13.05.2004 - 17:32 - # edit

    OYE ESTA EXCELENTE PERO ME QUEDA UNA DUDA SI QUIERO QUE LOS ARCHIVOS QUEDEN EN UNA CARPETA EN ESPECIFICO

  92. Aisengard 13.05.2004 - 20:36 - # edit

    Mensaje Original por ro0x
    y los permisos??

    Si detallas tu consulta veras que tendras mayor atencion. Una pregunta bien elaborada encontrara una respuesta certera.
    :arriba:

  93. No Registrado 04.08.2004 - 03:31 - # edit

    Hola, muy buenas.. en repetidas ocasiones he tirado de vuestra sabia experiencia y ayuda para poder resolver este tipo de conflictos de codigo.. ahora me veo negro con un problema al cual no soy capaz de dar solucion.

    Uso el EasyPHP para gestionar todo, ya que es mas sencillo, y en repetidas ocasiones siempre me marca lo mismo

    Notice: Undefined variable: archivo_name in v:\program files\easyphp1-7\www\www\2.php on line 2
    y a continuacion me da el error de que es incorrecto el formato del archivo que trato de subir.. ya tengo el php.ini preparado, con la ruta, y en on y bueno, no estoy seguro si deberia acceder a apache y poner esta carpeta en modo 777 de escritura, lectura..

    Que puedo hacer? estoy en un aprietillo, creo que montare apache por un lado, php por otro.. no se.. me podriais indicar que posible solucion tomar?

    Un cordial saludo y muchas gracias. Sois unos fenomenos!!

  94. Cluster 06.08.2004 - 19:50 - # edit

    Debes usar los arrays superglobales: $_FILES .. no $archivo_name sino $_FILES['archivo']['name'] ..

    mas información y lectura -obligada-:
    http://www.php.net/manual/en/features.file-upload.php

    Un saludo,

  95. No Registrado 28.09.2004 - 19:58 - # edit

    Es muy bueno el script me funciona de manera perfecta, lo he modificado incluso para que se adapte a mis necesidades (tipo de archivo, peso, errores propios, directorios, etc) pero realmante me gustaria saber si hay alguna forma de leer las propiedades del archivol. Al grano, si subo una imagen ya sea jpg o gif que es de mas de 150 X 150 pixels, no me dejara subirla o la borrara o me diera un error.

    Agradezco la ayuda que pudieran brindar,
    Gracias de antemano.

  96. Pixote 26.11.2004 - 06:50 - # edit

    Como introducción al upload está bien, pero en mi opinión y como pasa en casi todas las web que aportan código, ya me da igual que sea php,java,c,etc, no se le informa al usuario que lo está leyendo es sólo un ejemplo aplicable al tutorial y que lógicamente no es código fiable, para ello como para todo lo que se programe es necesario realizar un análisis previo.
    Tan sólo comento esto porque la gran mayoria de webs de diseño son perfectas pero de programación son nefastas, y quisiera con este comentario, abrir un debate sobre la funcionalidad vs. el diseño, cosas que a dia de hoy no se aplican como se debiera.
    Gracias por este espacio.
    pisote@mixmail.com

  97. GNUtOn 24.12.2004 - 16:52 - # edit

    Cambia los permisos del directorio a donde suben sus archivos, denle permisos de escritura, con eso se soluciona el problema (la mayoria de las veces).

  98. Dopon 06.01.2005 - 09:15 - # edit

    una duda sobre la funcion move_uploaded_file

    hay alguna otra forma que pueda subir un archivo de mas de 100 Kb es que estoy en un hosting gratiniano pa probar ne la web pewro por lo visto ta limitado ya que no lel el tamaño y no sube nada , de tal forma que no puedo editar el php.ini ni toquetear las opciones de configuracion :(

    por favor quisiera saber los archivosa que necesito subir no superan los 200 Kb solo x 100 y no puedo hacer nada :(

  99. No Registrado 14.01.2005 - 13:14 - # edit

    quisiera saber si me podrias mandar un script donde se puedan mandar archivos adjuntos con php mailer

  100. mauriciof 19.01.2005 - 10:46 - # edit

    Aqui dejo una modificacion del script original con las sugerencias hechas por el moderador para quienes deseen ver como funciona usando _FILES

    Este script solo permite el envio de archivos en formato gif o jpg (imagenes), para otro tipo de archivos cambiar las especificaciones MIME segun los requisitos particulares

    Primero lo que debe ir en el formulario:

    *********************************

    ****************************************

    Y luego el php que procesa la imagen enviada a traves del formulario:

    ****************************************

    < !DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">




    < ?php
    //formulario de upload por jorge luis martinez
    //modificado por Mauricio Fernandez
    //http://miscodigos.jlmnetwork.com/

    $extension = explode(”.”,$_FILES['archivo']['tmp_name']);
    $num = count($extension)-1;

    if(($_FILES['archivo']['type'] == “image/pjpeg”) or ($_FILES['archivo']['type']== “image/gif”)) {

    if(!move_uploaded_file($_FILES['archivo']['tmp_name'], “fotos/”.$_FILES['archivo']['name'])) {
    echo “error al copiar el archivo”;
    }
    else {
    echo “el archivo se ha subido con exito”;
    }
    }
    else {
    echo “el formato de archivo no es valido, solo se admiten imagenes gif o jpg”;
    }
    ?>


    ************************************


Anuncios por Q
-


Maestros del Web es el punto de encuentro para los entusiastas de la red.

Creative Commons by-nc-sa 3.0 | Política de Privacidad | CMS: Wordpress