Este Howto es acerca de como subir archivos atravez de PHP y guardarlos en MySQL asi como la extracción del archivo de MySQL atravez de PHP.

Requisitos:

  • Tener instalado PHP y MySQL.
  • Conocimientos basicos de PHP y MySQL.

Muchas veces necesitamos darle a los usuarios la facilidad de poder “subir” o guardar archivos en una base de datos y n es tan dificil como aparenta asi que comenzemos….

Primeramente necesitamos el diseño de la tabla

Imagen diseño de tabla para subir archivos con PHP y MySQL

y el script para crear la tabla es:

CREATE TABLE tbl_documentos (
id_documento INTEGER UNSIGNED NOT NULL AUTO_INCREMENT,
titulo VARCHAR(150) NULL,
descripcion MEDIUMTEXT NULL,
contenido LONGBLOB NULL,
tamanio INTEGER UNSIGNED NULL,
tipo VARCHAR(150) NULL,
nombre_archivo VARCHAR(255) NULL,
tamanio_unidad VARCHAR(150) NULL,
PRIMARY KEY(id_documento)
);

Explico un poco cada campo para darnos una mayor idea:

  • id_documento es el identificador o llave primaria
  • titulo contiene titulo para el documento
  • descripción contiene la descripcion del documento
  • contenido en este campo en donde se guardara nuestro documento
  • tamamio en este campo guardamos el tamaño del documento
  • tipo contendra el tipo MIME del documento
  • nombre_archivo contendra el nombre del documento
  • tamanio_unidad en este campo registraremos si la medida esta em kb,MB,GB

Ahora necesitamos un formulario
Aqui esta el codigo del archivo form.html:

<form id="test_upload" name="test_upload" action="upload.php" enctype="multipart/form-data" method="post">
<table border="0" cellpadding="0" cellspacing="0">
<tr>
<td>
Titulo
</td>
<td>
<input type="text" id="titulo" name="titulo"/>
</td>
</tr>
<tr>
<td colspan="2">
Descripcion
</td>
</tr>
<tr>
<td colspan="2">
<textarea id="descripcion" name="descripcion" cols="50" rows="5"></textarea>
</td>
</tr>
<tr>
<td colspan="2">
Archivo <input type="file" id="archivo" name="archivo"/>
</td>
</tr>
<tr>
<td colspan="2">
<input type="submit" value="Registrar Documento"/>
</td>
</tr>
</table>
</form>

Al formulario debemos como todos debe tener sus atributos
action que indica el archivo que sse encargara de procesar la información que le enviemos
y method que indica si los datos seran enviados por POST o GET para envio de archivos es obligatorio marcarlo como POST
adicinal a estos atributos debemos especificar enctype con el valor multipart/form-data para que se pueda realizar el envio.
Y aqui esta el codigo del archivo upload.php

< ?php
//ESTA FUNCION LA USAREMOS PARA OBTENER EL TAMAÑO DE NUESTRO ARCHIVO
function filesize_format($bytes, $format = '', $force = ''){
$bytes=(float)$bytes;
if ($bytes< 1024){
$numero=number_format($bytes, 0, '.', ',');
return array($numero,"B");
}
if ($bytes< 1048576){
$numero=number_format($bytes/1024, 2, '.', ',');
return array($numero,"KBs");
}
if ($bytes>= 1048576){
$numero=number_format($bytes/1048576, 2, '.', ',');
return array($numero,"MB");
}
}
//VERIFICAMOS QUE SE SELECCIONO ALGUN ARCHIVO
if(sizeof($_FILES)==0){
echo "No se puede subir el archivo";
exit();
}
// EN ESTA VARIABLE ALMACENAMOS EL NOMBRE TEMPORAL QU SE LE ASIGNO ESTE NOMBRE ES GENERADO POR EL SERVIDOR
// ASI QUE SI NUESTRO ARCHIVO SE LLAMA foto.jpg el tmp_name no sera foto.jpg sino un nombre como SI12349712983.tmp por decir un ejemplo
$archivo = $_FILES["archivo"]["tmp_name"];
//Definimos un array para almacenar el tamaño del archivo
$tamanio=array();
//OBTENEMOS EL TAMAÑO DEL ARCHIVO
$tamanio = $_FILES["archivo"]["size"];
//OBTENEMOS EL TIPO MIME DEL ARCHIVO
$tipo = $_FILES["archivo"]["type"];
//OBTENEMOS EL NOMBRE REAL DEL ARCHIVO AQUI SI SERIA foto.jpg
$nombre_archivo = $_FILES["archivo"]["name"];
//PARA HACERNOS LA VIDA MAS FACIL EXTRAEMOS LOS DATOS DEL REQUEST
extract($_REQUEST);
//VERIFICAMOS DE NUEVO QUE SE SELECCIONO ALGUN ARCHIVO
if ( $archivo != "none" ){
//ABRIMOS EL ARCHIVO EN MODO SOLO LECTURA
// VERIFICAMOS EL TAÑANO DEL ARCHIVO
$fp = fopen($archivo, "rb");
//LEEMOS EL CONTENIDO DEL ARCHIVO
$contenido = fread($fp, $tamanio);
//CON LA FUNCION addslashes AGREGAMOS UN \ A CADA COMILLA SIMPLE ' PORQUE DE OTRA MANERA
//NOS MARCARIA ERROR A LA HORA DE REALIZAR EL INSERT EN NUESTRA TABLA
$contenido = addslashes($contenido);
//CERRAMOS EL ARCHIVO
fclose($fp);
// VERIFICAMOS EL TAÑANO DEL ARCHIVO
if ($tamanio <1048576){
//HACEMOS LA CONVERSION PARA PODER GUARDAR SI EL TAMAÑO ESTA EN b ó MB
$tamanio=filesize_format($tamanio);
}

//CREAMOS NUESTRO INSERT
$qry = "INSERT INTO tbl_documentos ( titulo,nombre_archivo, descripcion, contenido, tamanio,tamanio_unidad, tipo ) VALUES
('$titulo','$nombre_archivo', '$descripcion','$contenido','{$tamanio[0]}','{$tamanio[1]}', '$tipo')";

//NOS CONECAMOS A LA BASE DE DATOS
//REMPLAZEN SUS VALOS POR LOS MIOS
mysql_connect("localhost","root","12345") or die("No se pudo conectar a la base de datos");

//SELECCIONAMOS LA BASE DE DATOS CON LA CUAL VAMOS A TRABAJAR CAMBIEN EL VALOR POR LA SUYA
mysql_select_db("test");

//EJECUTAMOS LA CONSULTA
mysql_query($qry) or die("Query: $qry <br />Error: ".mysql_error());

//CERRAMOS LA CONEXION
mysql_close();
//NOTIFICAMOS AL USUARIO QUE EL ARCHVO SE HA ENVIADO O REDIRIGIMOS A OTRO LADO ETC.
echo "Archivo Agregado Correctamente<br />";
echo 'Subir Otro Archivo<br /> ';
}else{
echo "No fue posible subir el archivo";
echo 'Subir Otro Archivo<br /> ';
}
?>

Ahora que ya tenemos nuestro script funcionando y podemos hacer los uploads que queramos vamos
hacer que se puedan explorar y descargar o mostrar en caso de que sea una imagen.
Primero creamos un archivo que nos imprima el contenido del documento y el tipo del mismo para poder renderizarlo
con este archivo que llamaremos getfile.php

< ?php
//NOS CONECAMOS A LA BASE DE DATOS
//REMPLAZEN SUS VALOS POR LOS MIOS
mysql_connect("localhost","root","12345") or die("No se pudo conectar a la base de datos");

//SELECCIONAMOS LA BASE DE DATOS CON LA CUAL VAMOS A TRABAJAR CAMBIEN EL VALOR POR LA SUYA
mysql_select_db("test");

//CONSTRUIMOS LA CONSULTA PARA OBTENER EL DOCUMENTO
$qry="Select * from tbl_documentos where id_documento={$_REQUEST['id_documento']}";
$res=mysql_query($qry) or die(mysql_error()." qry::$qry");
$obj=mysql_fetch_object($res);

//OBTENEMOS EL TIPO MIME DEL ARCHIVO ASI EL NAVEGADOR SABRA DE QUE SE TRATA
header("Content-type: {$obj->tipo}");

//OBTENEMOS EL NOMBRE DEL ARCHIVO POR SI LO QUE SE REQUIERE ES DESCARGARLO
header('Content-Disposition: attachment; filename="'.$obj->nombre_archivo.'"');

//Y PO ULTIMO SIMPLEMENTE IMPRIMIMOS EL CONTENIDO DEL ARCHIVO
print $obj->contenido;

//CERRAMOS LA CONEXION
mysql_close();
?>

Posteriormente crearemos un archivo para que nos liste los documentos registrados y
detecte si es una imagen en este caso imprimiremos un tag img y su src sera nuestro archivo getfile.php
cuando incluimos un archivo con php podemos pasarle parametros cono si se tratara de un query string del browser asi que le pasaremos el id_documento
para que nos muestre el archivo solicitado.
Este es e código de nuestro archivo list.php

< ?php
//NOS CONECAMOS A LA BASE DE DATOS
//REMPLAZEN SUS VALOS POR LOS MIOS
mysql_connect("localhost","root","12345") or die("No se pudo conectar a la base de datos");

//SELECCIONAMOS LA BASE DE DATOS CON LA CUAL VAMOS A TRABAJAR CAMBIEN EL VALOR POR LA SUYA
mysql_select_db("test");

//CONSTRUIMOS EL QUERY PARA OBTENER LOS ARCHIVOS
$qry="select
docs.*,
CASE docs.tipo
WHEN 'image/png' then
'image'
WHEN 'image/jpg' then
'image'
WHEN 'image/gif' then
'image'
WHEN 'image/jpeg' then
'image'
ELSE
'file'
END as display
from tbl_documentos AS docs";

//EJECUTAMOS LA CONSULTA
$res=mysql_query($qry) or die("Query: $qry ".mysql_error());

//RECORREMOS LA CONSULTA
//*********NOTA DONDE DICE alt='$obj-/>titulo' QUITA LA BARRA PARA QUE QUEDE ASI:
// alt='$obj->titulo'
// EL WORDPRESS ME ESTA REMPLAZANDO EL CODIGO

while ($obj=mysql_fetch_object($res)) {
//SI EL TIPO DE DOCUMENTO ES UMAGEN LA MOSTRAMOS SI NO SOLO HACEMOS EL LINK
switch ($obj->display){
case "image":
echo "<div>
<a href='getfile.php?id_documento={$obj->id_documento}'>
<img alt='$obj-/>titulo' src='getfile.php?id_documento={$obj->id_documento}'/>
</a>
</div><hr />";
break;
case "file":
echo "<div>
<a href='getfile.php?id_documento={$obj->id_documento}'>$obj->titulo</a>
</div><hr />";
break;
}

}

//CERRAMOS LA CONEXION
mysql_close();
?>

Ahora solo abrimos nuestro explorador con loas sigueintes direcciones:

  • http://url_deprueba/form.html -> Veremos nuestro formulario de subida
  • http://url_deprueba/list.php -> Veremos el listado de nuestros documentos

Descargar los archivos del howto de este

Y con esto terminamos este pequeño howto de como manejar archivos con php y MySQL
espero les sirva y cualquier comentario queja o sugerencia porfavor haganla saber asi como alguna duda que tengan y se pueda convertir en un howto
sera tomada en cuenta.
Cudense …

105 Respuestas para “Upload de archivos con PHP y Mysql”

  1. Carlos
    desde Spain Dijo:

    este script está muy bien hecho y claro, pero es peligroso, porque pueden subir a tu servidor un archivo .php u otro tipo.

    yo lo retocado añadiento el mime que solo quiero permitir que suban

    aqui esta la lista

    http://www.w3schools.com/media/media_mimeref.asp

    con un sencillo if, lo solucionamos

    if (($tipo==”aqui el mime que quieres que suban”))
    {

    saludos

    Responder

    Ruben Omar November 24th, 2008 10:01 am

    Ruben Omar desde Mexico Dijo:

    Gracias por el tip :)

    Responder

    hery August 22nd, 2009 8:36 pm

    hery desde Colombia Dijo:

    gracias por la info y el tuto

    Responder

    diego September 25th, 2011 10:19 pm

    diego desde Dijo:

    me podrías informar donde pongo “if (($tipo==”aqui el mime que quieres que suban”))”
    {
    para que sean solo archivos application/pdf
    y que cuando no es pdf indique ” solo arhivos PDF”ç
    gracias!

    Responder

    Pablo November 16th, 2011 1:48 pm

    Pablo desde Dijo:

    En la linea despues de obtener el tipo de archivo.

    $tipo = $_FILES["foto"]["type"];

    //NOS ASEGURAMOS QUE EL ARCHIVO SUBIDO SEA SOLO UNA IMAGEN Y NO OTRO TIPO DE ARCHIVO

    if (($tipo==”application/pdf”))
    {

    } //cierre de la llave antes de iniciar la consulta.

    //CREAMOS NUESTRO INSERT

    Responder

    leonardo June 10th, 2012 9:04 pm

    leonardo desde Dijo:

    disculpa pero q va dentro de las llaves?
    o no lleva nada?
    disculpa esq soy nuevo en esto

  2. NasfTTer
    desde Dijo:

    Te pasastes con el post, lo distes en la manos a todos los que buscan este tipo de info!

    lo mejor hermano saludos!

    Responder

  3. cesar edinson
    desde Peru Dijo:

    Execellente aportacion.. muxas gracias… lo recibire aver si despeja algunas dudas.. Saludoss—

    Responder

  4. JOSE
    desde Peru Dijo:

    PERO POR QUE DICEN PELIGROS? SI EL ARCHIVO SUBE A ALA BAE DE DATOS Y NO A LA CARPETA DEL SERVIDOR

    Responder

    Frank February 14th, 2012 4:17 pm

    Frank desde Chile Dijo:

    Tu ignorancia peruano conmueve jajaja

    Responder

  5. Imanol
    desde Spain Dijo:

    Me parece una excelente aportación pero no logro ponerlo en marcha. Recibo el siguiente error:
    You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ” at line 1 query::SELECT * FROM actasdue WHERE Id_documento =
    Realmente me estoy quebrando la cabeza. ¿Saben alguno de ustedes a que se puede deber?
    Muchas gracias de antemano

    Responder

  6. Juan
    desde Peru Dijo:

    Como hago para que almacene mas de 1 mb gracias

    Responder

    cesar edinson July 17th, 2009 9:29 am

    cesar edinson desde Peru Dijo:

    Fijate en el php.ini q este habilitado la opcion de 2M puebes subir hasta mas pero ese es el valor por defecto… en modo local Funciona de forma correcta

    Responder

  7. ruben
    desde Spain Dijo:

    las imagenes que subes a el servidor donde se guardan?

    Responder

  8. Laura
    desde Mexico Dijo:

    Estoy haciendo un programa y no se si esto me funcioneee!!!! tambien ocupo bajar el php pero no se de donde!????????
    Alguien que me ayude se me cierra el mundo!!!!

    Responder

  9. Ruben Omar
    desde Mexico Dijo:

    Hola Laura al final del articulo se encuentra el link de descarga que es este : http://blog.deliriumlabs.net/wp-content/uploads/upload.zip

    Responder

  10. Kechis
    desde Spain Dijo:

    Hola, muchas gracias ante todo.
    Necesitaba a ver si me pueden ayudar con un error q me da, y para comentarles un pequeño error q hay, en la linea 49 del upload.php el caracter extraño es un “<" por si alguien le ayuda.

    Mi problema es q me da este error al abrir el archivo: list.php
    Catchable fatal error: Object of class stdClass could not be converted to string in C:\xampp\htdocs\upload\list.php on line 52

    la linea 52 es la del echo q pongo a continuacion:

    echo "
    id_documento}’>
    //////////////Desde aqui
    titulo’ src=’getfile.php?id_documento={$obj->id_documento}’/>
    ///////////Hasta aqui.

    “;

    Muchas gracias de antemano.

    Responder

    Kechis February 9th, 2010 10:28 am

    Kechis desde Spain Dijo:

    Olvidadlo, me lo solucione yo mismo, sorry ^^

    Responder

    Kendall March 2nd, 2010 8:06 pm

    Kendall desde Venezuela Dijo:

    Men queria saber como solucionaste ese problema, llevo días tratando de ver por que me sale ese error… Espero q me puedas ayudar

    Responder

    Guillermo January 23rd, 2013 11:12 pm

    Guillermo desde Chile Dijo:

    Me podrías ayudar con ese error, cual fue la solución que implementaste? te lo agradecería mucho. Saludos.

    Responder

    Guillermo January 23rd, 2013 11:41 pm

    Guillermo desde Chile Dijo:

    Ya lo solucioné, muchas gracias.

    Responder

    Sebastian May 5th, 2010 12:06 pm

    Sebastian desde Colombia Dijo:

    Hola como estas, me podrias explicar cual es el error de la linea 49 ? no se como arreglarlo y no entiendo cuando dices que es un “<" en vez del caracter extraño, cual caracter seria ?

    Responder

  11. Jheyson
    desde Peru Dijo:

    Holas muy buen post, exelente ¡¡¡ vamoa a ver como keda ….

    Responder

  12. Andrei
    desde Costa Rica Dijo:

    Amigo gracias por el aporte…

    Pero tengo un problema, no me ejecuta el archivo upload.php…
    Lo que hace es abrirlo, como para abrir o guardar…

    Te agradezco cualquier ayuda..

    Responder

    Andrei April 26th, 2010 2:34 pm

    Andrei desde Costa Rica Dijo:

    Ya solucione el problema…

    De todas maneras Gracias.

    Responder

  13. ASERCAP
    desde Peru Dijo:

    xvr ahora mismo implementos este upload en mi web …

    Responder

  14. Ken
    desde Peru Dijo:

    muy bueno, tengo el siguiente problema, al subir el archivo me da error en la linea 55 de upload.php

    $qry = “INSERT INTO tbl_documentos (titulo,nombre_archivo, descripcion, contenido, tamanio,tamanio_unidad, tipo) VALUES
    (‘$titulo’,'$nombre_archivo’, ‘$descripcion’,'$contenido’,'{$tamanio[0]}’,'{$tamanio[1]}’, ‘$tipo’)”;

    aver si me ayudan =)

    Responder

    Patricia June 10th, 2010 7:47 am

    Patricia desde Dijo:

    Creo que te faltan los puntos en ‘.$descipcion.’ etc etc… para concatenar en php y string…

    Saludos!

    Responder

  15. Patricia
    desde Dijo:

    Hola! mira lo que quiero hacer es seleccionar del list.php ciertos archivos y comprimirlos en zip, tengo como hacerlo para zip, pero tengo problemas de rescatar n archivos a la vez…

    Gracias! excelente post :D

    Saludos!

    Responder

    ernesto February 3rd, 2012 10:48 am

    ernesto desde Venezuela Dijo:

    tengo la misma inquietud.. no logro mostrar solo un archivo :s

    Responder

    ernesto February 3rd, 2012 10:51 am

    ernesto desde Venezuela Dijo:

    creo que donde hay que cambiar es aqui

    $qry= —> “select
    docs.*, <—
    CASE docs.tipo
    WHEN 'image/png' then
    'image'
    WHEN 'image/jpg' then
    'image'
    WHEN 'image/gif' then
    'image'
    WHEN 'image/jpeg' then
    'image'
    ELSE
    'file'
    END as display
    from informe_personal AS docs";

    Responder

  16. ivan
    desde Colombia Dijo:

    com puedo subir multiples archivos?

    Responder

  17. mauricio
    desde Dijo:

    mi pregunta es la siguiente…

    supongamos que quiero cargar mp3 y una imagen, como para hacer una presentación de la portada de un disco y sus canciones, las que se llaman desde un reproductor y (valga la redundancia) las reproduce.

    probé esto para subir la imagen y anda fenomenalmente bien, luego intenté modificar el form para que en lugar de subir de a un solo archivo suba de a 5 pero el resultado es que me muestra el título, y al darle al enlace del título inmediatamente me quiere hacer bajar el archivo getfile.php

    mi pregunta sería… ¿como se debe modificar para que acepte multiples uploads y que registre todo y no solo el título o trabajarlo de que manera para que se pueda hacer lo que digo?

    Responder

  18. Andres Aya
    desde Dijo:

    Hola, muy buen post, de hecho también lo estoy implementando en mi website, pero tengo una duda, puedo subir archivos de audio?

    Responder

  19. antonio
    desde France Dijo:

    me da error el script, cuando hago clic en el boton registrar documento se me abre otra ventana con un montón de codigo que no entiendo…

    Query: INSERT INTO tbl_documentos ( titulo,nombre_archivo, descripcion, contenido, tamanio,tamanio_unidad, tipo ) VALUES (‘s’,'CB1300_1.jpg’, ‘s’,'ÿØÿàJFIFddÿìDuckyÿîAdobedÀÿÛ„   #%\’%#//33//@@@@@@@@@@@@@@@&&0##0+.\’\'\’.+550055@@?@@@@@@@@@@@@ÿÀjô\”ÿÄ

    sale eso pero mucho mas largo esto es solo un trozo.

    Unsaludo

    Responder

    ernesto-gonzalez February 28th, 2012 9:12 am

    ernesto-gonzalez desde Dijo:

    me sucede lo ismo, y es cuando el archivo pesa mas de 1 mega, el problema no esta en el php.ini, xq eso ya esta solventado. lo probe con archivos que subian en b, kb y todo bien, cuando subo un archivo que pesa 15 m, me arroja ese error.

    Responder

    Emilio April 11th, 2013 1:30 pm

    Emilio desde Chile Dijo:

    lograste solucionar la subida a mas de 1MB

    Responder

    Arturo June 18th, 2013 11:03 pm

    Arturo desde Dijo:

    Puedes agregar en tu archivo de conexion o antes de tu query mandar un query con lo siguiente
    mysql_query(“set global max_allowed_packet=5*1024*1024″); la multiplicacion la hago ahi para no hacerla a mano cambia el 5 por el numero de megas que quieras permitir como maximo tambien te recomendaria que en el archivo getfile.php hicieras una validacion antes de hacer el query pues el campo pasa directo y es suceptible de mysql injection

  20. antonio
    desde France Dijo:

    al final de lo que os he dicho me da este error,
    alguien puede ayudarme?

    Error: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ”uf’.,.’CB1300_1.jpg’.,.’dios mio’.,.’ÿØÿàJFIFddÿìDucky’ at line 2

    Responder

  21. Lily
    desde Ecuador Dijo:

    El script esta bien estructurado funciono super bien, gracias por la informacion me ha sido de muchisima ayuda.
    Saludos que Dios te bendiga.
    Para solucionar los problemas revicen bien la parte de la conexion a su base de datos y en especial la parte en la que envian la consulta.

    Responder

  22. cursos de maquinaria pesada
    desde Peru Dijo:

    exeletne aporte me estab matando la cabeza para subir un archiuvo a mi BD por la ….. ahora es mas facil con esto jejejje XDXDXDd….. atte: asercap maquinaria pesada

    Responder

  23. escuela de operadores de maquinaria pesada
    desde Peru Dijo:

    muy bueno realmente loco esto e bien xvr para los que recien estamos empezando en este mundo de la web subir archivos y todo eso… atte Asercap

    Responder

  24. OMAR
    desde Dijo:

    EXCELENTE APORTE GRACIAS…

    Responder

  25. rosita
    desde Chile Dijo:

    Hola…. me funciona el script… pero solo con imágenes inferiores a 1024, y el php.ini esta en 200M… nose donde modificarlo!!….
    alguién me puede ayudar?

    Responder

  26. alejandro
    desde Mexico Dijo:

    Hola esta de pelos tu post intente modificarlo para que pudiera eliminar los archivos que lista pero no lo consegui sabras como?

    Responder

  27. Mariam Angelique
    desde Mexico Dijo:

    Muchas Gracias excelente post, funciono de maravilla!!!!!!

    Responder

  28. Jorge
    desde Spain Dijo:

    Funciona de lujo, pero tengo muchos problemas para subir mas de 1 mega, tengo que cambiar el mysql o el php.ini??
    He probado cambiado el max_allowed_packet de mysql pero no consigo nada

    Responder

    Saray September 20th, 2011 10:34 am

    Saray desde Mexico Dijo:

    Hola,
    Hay que modificar el php.ini, para que lo ubiques en tu servidor, crea un archivo info.php con el sig codigo:

    Luego abre el link de donde hayas guardado el archivo: http://tudominio.com/info.php

    ahí te abre una pagina con una tabla, donde dice: Configuration File (php.ini) Path

    ahi te indica la ruta del archivo php.ini, en mi caso es /etc/php.ini

    Lo buscas en tu servidor y lo abres, solo tienes que cambiar la parte que dice:
    ;;;;;;;;;;;;;;;;
    ; File Uploads ;
    ;;;;;;;;;;;;;;;;

    ; Whether to allow HTTP file uploads.
    file_uploads = On

    ; Temporary directory for HTTP uploaded files (will use system default if not
    ; specified).
    ;upload_tmp_dir =

    ; Maximum allowed size for uploaded files.
    upload_max_filesize = 2M //aquí cambias los megas//

    Saludos

    Responder

    Saray September 20th, 2011 10:36 am

    Saray desde Mexico Dijo:

    phpinfo();

    el codigo del archivo

    Responder

    alma August 8th, 2012 1:48 pm

    alma desde Mexico Dijo:

    hola!!
    oye ya cambie el php.ini pero sigue sin permitirme subir mas de 1mb, que puedo hacer???, saludos!!!

    Responder

  29. oscar
    desde Ecuador Dijo:

    Estimado el formulario funciona bien pero cuando quiero ver no me abre me dice que el programa no lee mapa de bits.

    gracias
    equatore

    Responder

  30. oscar
    desde Colombia Dijo:

    buenas a todos el post esta super pero ya modifique el php.ini y no mme sube mas de 1mb que hago ayuupa porfavor y tambien queria sabeer si se puede paginar los resultados de los documentos obetnidos ya que necesito subir muchos y se ve feo todos en una misma pagina web

    Responder

    alma August 8th, 2012 1:50 pm

    alma desde Mexico Dijo:

    hola!!
    solo para preguntarte si pudiste lograr subir archivos de mas de 1mb, me seria muy util la informacion, saludos!!!!

    Responder

  31. David
    desde Mexico Dijo:

    Miren yo tengo este codigo,ya me funciona pero me gustaria que alguien me ayudara cargar video en la base de datos.
    Les dejo el link.Espero su respuesta.

    http://galeon.com/david-juarez/bajar.html

    Responder

  32. Diego
    desde Dijo:

    buenas ! muy buena aplicación !
    me faltaría poder borrar los registros! alguien lo tiene?
    gracias de ante mano
    D.

    Responder

  33. N4CH0
    desde Bolivia Dijo:

    gracias por el aporte, me gustaria saber como le puedo hacer para subir archivos multiples y luego guardarlos en una base de datos, espero tu respuesta gracias!!!

    Responder

  34. Saray
    desde Mexico Dijo:

    para borrarlos? desde la página

    Responder

  35. albert
    desde Mexico Dijo:

    alguien me puede ayudar de como puedo descar documento imagenes de la b.d con codigo de php.

    Responder

  36. Karl
    desde Mexico Dijo:

    Excelente aportación, trabaja a la primera y sin fallos. Felicidades.

    Responder

  37. Karl
    desde Mexico Dijo:

    Muy Buena programación, pero no me sale la descripcion, solo el título, que debo insertar en la consulta para ver la descripción?

    Responder

  38. luis86
    desde Mexico Dijo:

    hola gracias por el aporte muy bueno me funciono pero tengo un problema una vez q muestra la lista de los documentos como hago para que una vez seleccionados empieze la descarga o sera q me equivoque en algo? plz si alguien sabe la respuesta se lo agradeceria saludos !!!!

    Responder

  39. lucas
    desde Dijo:

    excelente el aporte!!! Aunque tengo un problema: no me muestra ni el titulo ni la descripcion, solo el link de descarga.
    Sube imagen y texto pero no da las descripciones ni titulos ni nada… porfa ayudaaaa…

    Y gracias nuevamente

    Responder

  40. ana
    desde Dijo:

    hola quisiera saber como descar archivos con php y msql.. me urge mucho :S muchas gracias espero su respuesta…

    Responder

    diego February 29th, 2012 5:53 am

    diego desde Dijo:

    lee este post y veras como se realiza!

    Responder

  41. ernesto
    desde Venezuela Dijo:

    para que por medio de un numero de registro al cosultar, solo me aparezca un archivo que deberia de cambiarle..?

    Responder

  42. pablo
    desde Spain Dijo:

    mil gracias por el post sin duda un excelente trabajo funciona fenomenal. Un saludo

    Responder

  43. Fernando
    desde Norway Dijo:

    Hola buenas soy nuevo en esto,

    El post esta estupendo pero cuando cargo el archivo getfile.php, me sale este error:

    You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ” at line 1 qry::Select * from tbl_documentos where id_documento=

    creo que el fallo esta en {$_REQUEST['id_documento']}”; pero no estoy seguro.

    ¿alguien sabe de esto?

    Responder

    Ben April 18th, 2012 5:13 pm

    Ben desde Mexico Dijo:

    Hola

    Acabo de probar los códigos y están de lujo, si funcionan, en alguna parte de tu archivo moviste el id_documento, es decir, le cambiaste el nombre o algo asi,

    tipo}”);

    //OBTENEMOS EL NOMBRE DEL ARCHIVO POR SI LO QUE SE REQUIERE ES DESCARGARLO
    header(‘Content-Disposition: attachment; filename=”‘.$obj->nombre_archivo.’”‘);

    //Y PO ULTIMO SIMPLEMENTE IMPRIMIMOS EL CONTENIDO DEL ARCHIVO
    print $obj->contenido;

    //CERRAMOS LA CONEXION
    mysql_close();
    ?>

    Espero y te ayude esto

    Responder

    jose June 7th, 2012 2:58 pm

    jose desde Mexico Dijo:

    no funciona a mi me da el mismo error y no movi nada me sale lo mismo

    Responder

    Jorge September 10th, 2012 7:05 pm

    Jorge desde Mexico Dijo:

    Ya lo arreglaste, Yo logre una respuesta a tu pregunta pero no sé si sea lo que tu quieras

  44. Crew
    desde Mexico Dijo:

    oye hermano te lucistes, que buen post, buen aporte, aunke no desconosco algunos codigos pero te doy el 110%!!! me ayudo mucho, tenia una tarea, entregue el avance gracias a ti por ke me pidieron ke lo trabajara en ubuntu con el editor bluefish y no tenia ni idea, habia trabajado en ubuntu pero poco. nada como windows ke todo viene regalado jajaja. saludos espero y haber con ke otro nos sorprendes, cuidate mucho y dios te bendiga. Good Lock!

    Responder

  45. jesus
    desde Dijo:

    si quisiera subir un archivo .rar de unos 300mb en que parte del codigo lo modificaria.

    ” GRACIAS “

    Responder

  46. elara
    desde Chile Dijo:

    Excelente!!! He estado mas una semana tratando de hacer algo decente y en un par de minutos lo he logrado.

    Muchas Gracias

    Responder

  47. Aaron
    desde Mexico Dijo:

    Hola

    Me manda un error de apache y no termina de cargar, si veo la base de datos ahi estan los archivos, pero si entro a list.php me envia el error:

    Catchable fatal error: Object of class stdClass could not be converted to string in C:\wamp\www\sistemas\list.php on line 35

    Linea 35: titulo’ src=’getfile.php?id_documento={$obj->id_documento}’/>

    Saben cual pueda ser el problema?

    Apache Version : 2.2.11
    PHP Version : 5.3.0

    Gracias

    Responder

    Aaron June 12th, 2012 5:31 pm

    Aaron desde Mexico Dijo:

    Ya lei el comentario para l linea 35 y quite la diagonal, pero me sigue mandando el error Apache HTTP Server ha detectado un problema y debe cerrarse, tambien al abrir list.php

    Responder

  48. alma
    desde Mexico Dijo:

    al probar este ejemplo solo acepta archivos menores de 1mb, ya cambie los valores de php.ini pero sigue marcandome el mismo error que es:
    Warning: mysql_query() [function.mysql-query]: MySQL server has gone away in C:\xampp\htdocs\pruebasDocs\upload\upload.php on line 67

    Warning: mysql_query() [function.mysql-query]: Error reading result set’s header in C:\xampp\htdocs\pruebasDocs\upload\upload.php on line 67
    Query: error
    Error: MySQL server has gone away
    alguien me puede ayudar por favor???

    Responder

  49. marco
    desde Mexico Dijo:

    podran poner el aporte para que lo pueda almacenar la imagen dentro de una carpeta de mi servidor les agradeceria mucho

    Responder

  50. Uriel
    desde Mexico Dijo:

    Hola oye si quiero que el peso maximo sea de 4MB como y donde se lo pongo??

    Responder

    juan January 10th, 2013 3:06 pm

    juan desde Mexico Dijo:

    Hola ando igual donde modifico para que el peso sea po lo menos de 2 mb ya hice el cambio en php.ini y nada de nada

    Responder

    Uriel January 24th, 2013 12:03 am

    Uriel desde Mexico Dijo:

    Oh disculpa, pero a lo ultimo no fue necesario en mi caso de cambiarle el tamaño a un peso no mayor a 500kb ya que yo estaria utilizando archivos pdf. asi que no resolvi eso y pues asi lo deje solo lo limite para el tamaño antes mensionado.

    Responder

  51. ricardo
    desde Colombia Dijo:

    Buenas tardes es para preguntale si el codigo me sirve para subir videos.

    Responder

  52. Bellver
    desde Mexico Dijo:

    Muy bueno el codigo gracias por el aporte .. solo 2 dudas si quieres registrar quien subio el archivo??? …
    y la segunda es q al momento de la descrga al abrir el archivo me dice q esta dañado … aunqe el archivo si se puede visualizar

    Responder

    Arturo June 18th, 2013 11:24 pm

    Arturo desde Dijo:

    agrega un campo mas a la base de datos subido_por o como gustes llamarlo si manejas sessiones puedes tomar el usuario que esta logueado de ahi.

    Responder

  53. alejandra
    desde Argentina Dijo:

    Hola! muy bueno el tutorial! gracias por compartirlo!!!!

    Responder

  54. Guillermo
    desde Chile Dijo:

    Estimados, alguien sabe cómo puedo mostrar el título y descripción junto al archivo que cargué?

    Se los agradezco.

    Saludos.

    Responder

    Arturo June 18th, 2013 11:21 pm

    Arturo desde Dijo:

    solo carga $obj->descripcion y $obj->titulo usa esas variables en donde quieres mostrarlo

    Responder

  55. Uriel
    desde Mexico Dijo:

    lo que yo hice fue un while que me mostrara esa informacion pero fue a parte del link no quise quitarle el div, lo hice con una tabla.

    Responder

    Guillermo January 23rd, 2013 11:53 pm

    Guillermo desde Chile Dijo:

    Me podrías ayudar con el código, please!!!

    Responder

    Guillermo January 24th, 2013 12:00 am

    Guillermo desde Chile Dijo:

    Me resulto…te pasaste de todas maneras…muchas gracias man…

    Responder

  56. victor
    desde Dijo:

    Eres un genio amigo!!!!! Solo una cosa como hago para poder sacar automaticamente el link de descargar para el archivo subido?? y otra cosa al subir el archivo como puedo dejarlo en modo visor??

    Responder

    Arturo June 18th, 2013 11:19 pm

    Arturo desde Dijo:

    imagino no es la forma mas ideal pero te sacara del apuro si inmediatamente despues del insert haces un query con un select ya que debe haber quedado con el id_documento mas alto ejemplo:
    $query=”select id_documento from tbl_documentos order by desc limit 1″;
    $result=mysql_query($query);
    if($row = mysql_fetch_array($result)) {
    $numero=$row['id_documento']+1;
    } else { $Expediente=1; } <–Esto es por si es el primer registro
    al ser el campo autoincrementable sabes que el id subira en uno con eso sabes cual fue el asignado solo tomalo en una variable y en tu getfile.php?id_documento={$numero}

    Responder

    Arturo June 18th, 2013 11:23 pm

    Arturo desde Dijo:

    en $Expediente cambialo por $numero te estaba adecuando el que uso yo

    Responder

  57. Chan
    desde Mexico Dijo:

    Alguien sabe porque no muestra imagenes solo me muestra los PDF pero ninguna imagen..
    Se supone que esa opcion esta en la parte del list.php pero no me muestra nada, lo sube perfectamente pero a la hora de mostrarlo no lo hace??

    Responder

  58. arturo
    desde Dijo:

    EXCELENTE APORTE..MUCHAS GRACIAS..SIGUE CON ESTE TIPO DE AYUDA

    Responder

  59. Emilio
    desde Chile Dijo:

    Hola, alguien soluciono el poroble de subir mas de 1MB y que no muestre simbolos raros.
    Saludos

    Responder

    Arturo June 18th, 2013 11:06 pm

    Arturo desde Dijo:

    los simbolos raros te los muestra porque en el query esta señalado que en caso de error te muestre eso, es el codigo del archivo ya que se almacena en blob (texto) mysql_query(“set global max_allowed_packet=5*1024*1024″); envia ese query al hacer tu conexion asi cambias las configuraciones de mysql por defecto te permite solo un mega cambia el 5 por el numero de megas que desees no lo eleves mucho o de hacerlo cambia tambien el set_timeout(ponunvalor alto) de otra manera la pagina php caducara ejecutando el script

    Responder

  60. FELIPE
    desde Dijo:

    hola , estoy tratando de descargar el pdf y me dice error, dice esta dañado y no puede repararse!!! ayuda please

    Responder

  61. Marcelo_Esquivel
    desde Dijo:

    Para los que tenga problema para subir un archivo que pese mas de 1M, deben buscar en la carpeta donde este instalado el MySQL el archivo my.ini y ahi modificar la variable max_allowed_packet = 1M

    Responder

  62. Guest Post PAPERMAG
    desde Dijo:

    Guest Blogging…

    […] Guest blogging is a method used by bloggers to increase blog traffic where bloggers […]…

  63. Quality
    desde China Dijo:

    I’m performing a cartoon webliography to get a class in senior high school and a web based publication was required by us. I liked up the set of the idea and the site of it being peer edited, and so I used it in my display.

    Responder

  64. scrapebox proxies
    desde United States Dijo:

    Another area is equipment lease management software which will
    let you handle your various leased assets from location, allowing you to control functions like lease expirations and renewals when they
    arise. You do not have find the files in zip folders
    and regular ones anymore. This may make many business owners hightail it screaming however, some expenses are
    worth the price.

    Responder

  65. _______
    desde Dijo:

    Soccer______________________________26.2___________________________________________________________________________Livescore__________________________________________________________________________________________________________________________________________________________________18____________________________________________________________________________________________________________________________________________________________________________2018____________________________________________________________________________________________________________________________________________________24__________________________________________________________________________________________________________________________________________________________________________________________________________________________________________2020_________30_______________26.2_____________________________
    ______________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________._.__________________________________________________________________________________________________________________28___________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________ ___________________________________________________________________________________________________________________________________________________________________________________________________5______________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________2_________________________________________________________________________________________________________________________________25________________________________________________________._________________________________________________________________________22__________________5____________55000________________________________2022___________________________________________________________________________________________________________________________________________________________________________________________________________________________________________ __________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________43_________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________34__________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________ _______________________________________________________________________________________________________________________________________________27__________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________2008___________________10_____________________________________________________ ____________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________
    ____________________________________chirojung_____FriJun0220171213_______4_______________________________________________________________________________________________________________________________________________soccer___________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________28_____80__________________50________________________________________________________________________________________________________________________________________________2018__________________________________________________________________________________________________________________________________ _________________________________________________________________________________________________________________________________________________________________________201617_________27__________________________________________________________________________________________________________________________________________________________________________________________________________________________._._______________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________2020___________________________________________________________________30_____________________________ ______________________________________________________________________________________________soccer_________________________________________________________________4____135_________________________________________________________________________________________130___________________________________________________100_______________________________________________________________________________________________________________________________________________________________135______

    Responder

  66. poker online singapura
    desde Dijo:

    In fact, if you go on the internet, you’ll find many websites offering these tutorials for free.
    There’s no need for them to go to untrusted sites or contact shady sellers to get
    more Facebook poker chips. Take the niche of poker, for
    example, you could choose the keyword phrase ‘personalized poker chips,’ to attract visitors to your poker website.
    So it’s clearly important to continue following-up with these professionals on your list.

    Responder

  67. http://www.allothealthcareservices.co.uk/strong-is-the-new-skinny/
    desde Dijo:

    Por conseguinte sua satisfa

    Responder

  68. curso a distancia php y mysql
    desde Dijo:

Responder