SlideShare una empresa de Scribd logo
1 de 7
Manejo de datos BLOB con PHP y
MySQL
Autor: MySQL Hispano
1 . Creando la base de datos
2 . Agregando archivos a la base de datos
3 . Listando los archivos de la base de datos
4 . Descargando archivos de la base de datos
5 . Comentarios finales
Cedido por MySQL Hispano.
Sin duda alguna, una de las preguntas más frecuentes en relación a MySQL es, "¿Cómo
puedo almacenar archivos en una base de datos?". La respuesta es, se tienen que usar los
tipos de datos BLOB. Estos BLOBs (Binary Large Objects) pueden almacenar
prácticamente cualquier tipo de datos, incluyendo documentos de MS Word, imagenes
gif/jpeg, archivos PDF, MP3s, etc.
En este artículo vamos a mostrar como crear un repositorio de archivos binarios usando
PHP y MySQL para poder almacenar diferentes tipos de archivos. Veremos como
almacenar cada uno de los archivos en una base de datos, para posteriormente
recuperarlos.
Para probar los ejemplos en este artículo, es necesario tener acceso a un servidor con
soporte para PHP, además de contar con un servidor MySQL. Se asume que se cuentan
con los privilegios apropiados para crear la base de datos, y que MySQL está corriendo
en el mismo servidor que PHP.

Creando la base de datos
Nuestro repositorio de documentos usará una base de datos que contenga únicamente
una tabla para almacenar dichos documentos.
[eduardo@casita]$ mysqladmin create repositorio
[eduardo@casita]$
[eduardo@casita]$ mysql repositorio
Welcome to the MySQL monitor. Commands end with ; or g.
Your MySQL connection id is 139 to server version: 3.23.41
Type 'help;' or 'h' for help. Type 'c' to clear the buffer.
mysql> CREATE TABLE archivos(
-> id int not null auto_increment primary key,
-> nombre varchar(50),
-> titulo varchar(50),
-> contenido mediumblob,
-> tipo varchar(50));
Query OK, 0 rows affected (0.01 sec)
mysql> grant all on repositorio.* to bingo@localhost identified by
'holahola'
Query OK, 0 rows affected (0.46 sec)

Ahora tenemos una base de datos llamada repositorio, la cual contiene una tabla llamada
archivos.
Los detalles de cada campo en la tabla archivos se muestra a continuación:
•

•
•

•

•

id - Un número entero que nos proporcionará un identificador único para cada
archivo que iremos almacenando. Éste se irá incrementando automáticamente
cada vez que se vaya agregando un nuevo registro.
nombre - El nombre original del archivo, por ejemplo, foto.gif, curriculum.doc,
etc
titulo - Una breve descripción de cada archivo que se irá guardando en la tabla,
por ejemplo "Cartita para mi novia", o "La foto de mi perro". Este título será
usado posteriormente al estar revisando los archivos de nuestro repositorio a
través de una página web.
contenido - Un campo de tipo binario (blob) para guardar el contenido de cada
archivo. En nuestra tabla hemos usado un tipo mediumblob, el cuál puede
almacenar archivos hasta de 16MB.
tipo - Como veremos más adelante, cada archivo (ya sea un .doc, .gif, .pdf, etc)
tiene un tipo único. Cuando se envía un archivo hacía el servidor web a través de
una página web, el navegador le envía al servidor la información acerca del tipo
del archivo, o bien, del tipo de contenido del archivo. Los tipos de contenido son
simples cadenas. El tipo de contenido para un archivo MS Word es
"application/msword", el tipo de contenido para una imagen GIF es "image/gif",
etc.

Agregando archivos a la base de datos
Ahora que tenemos lista la base de datos que servirá como repositorio de nuestros
archivos, vamos a crear un simple página web que permita seleccionar un archivo desde
el navegador para posteriormente enviarlo a un script en PHP que se va a encargar de
almacenarlo en nuestra base de datos. La página web será nombrada
escoger_archivo.html y el script en PHP se llamará guardar_archivo.php.
La página web puede contener todo el código HTML que se desee, pero es necesario
que se incluya el siguiente formulario para que se tenga la opción de escoger un archivo
y enviarlo al servidor.
<form enctype="multipart/form-data" action="guardar_archivo.php"
method="post">
Descripción <input type="text" name="titulo" size="30">
Ubicación <input type="file" name="archivito">
<input type="submit" value="Enviar archivo">
</form>

Del código que hemos escrito tenemos que subrayar lo siguiente:
•
•
•

El formulario necesita un atributo enctype con un valor multipart/formdata.
El método de envío tiene que ser POST.
Se tiene que usar por lo menos un campo del tipo file

Estos son los tres requerimientos básicos que debe cumplir la página HTML que servirá
para subir los archivos al servidor. Antes de escribir el código del script
guarda_archivo.php, vamos a comentar algo acerca de la forma en como se tomaran
los datos del archivo que se va a recibir.
Desde la versión 4.1 de PHP se recomienda se utilice el arreglo $_FILES para leer los
datos del archivo que se está subiendo al servidor. A continuación se listan los
elementos que contiene este arreglo. Nótese que el nombre de los índices del arreglo
depende de como se haya nombrado el campo del tipo file en el formulario.
$_FILES['archivito']['name']
Es el nombre original del archivo.
$_FILES['archivito']['type']
El tipo MIME del archivo,.. image/gif, application/pdf, application/msword,.. etc
$_FILES['archivito']['size']
El tamaño del archivo en bytes.
$_FILES['archivito']['tmp_name']
La ubicación del archivo temporal que se crea cuando se sube un archivo al
servidor. Es en esta variable de donde se leen los datos del archivo en sí. Si estos
datos no son copiados o movidos a otro lugar, o en nuestro caso, almacenados en
una base de datos, se pueden perder, ya que PHP elimina este archivo después de
un determinado tiempo.
Por ejemplo, estos son los posibles valores para un archivo j-odbc.zip que se ha subido
al servidor:
$_FILES["archivito"][name] => j-jdbc.zip
$_FILES["archivito"][type] => application/zip
$_FILES["archivito"][tmp_name] => /tmp/phpvXQpqP
$_FILES["archivito"][size] => 337945

Cabe mencionar que se tienen que revisar, y en su caso modificar las siguientes
variables del archivo de configuración de PHP para que se puedan subir los archivos al
servidor, y puedan ser correctamente manejados por un script de PHP.
•
•

•

file_uploads - Le dice a PHP si se pueden, ó no, subir archivos al servidor. Esta
variable debe tener el valor "On".
upload_max_filesize - Le indica a PHP cuál es el tamaño máximo del archivo
que se puede aceptar. Se puede utilizar el sufijo "M" para indicar el valor en
MegaBytes, por ejemplo, con un valor 2M se acepta un archivo máximo de 2
MegaBytes.
upload_tmp_dir - Es el directorio en el que se copia temporalmente el
contenido del archivo cuando se sube al servidor.

Ahora es el momento de mostrar el código del script en PHP que va a guardar el archivo
en nuestra base de datos.
/* guardar_archivo.php */
require("dbconnect.inc.php");
$archivo
$tamanio
$tipo
$nombre
$titulo

=
=
=
=
=

$_FILES["archivito"]["tmp_name"];
$_FILES["archivito"]["size"];
$_FILES["archivito"]["type"];
$_FILES["archivito"]["name"];
$_POST["titulo"];

if ( $archivo != "none" )
{
$fp = fopen($archivo, "rb");
$contenido = fread($fp, $tamanio);
$contenido = addslashes($contenido);
fclose($fp);
$qry = "INSERT INTO archivos VALUES
(0,'$nombre','$titulo','$contenido','$tipo')";
mysql_query($qry);
if(mysql_affected_rows($conn) > 0)
print "Se ha guardado el archivo en la base de datos.";
else
print "NO se ha podido guardar el archivo en la base de
datos.";
}
else
print "No se ha podido subir el archivo al servidor";

El archivo dbconnect.inc.php contiene únicamente las instrucciones para conectarse a
MySQL y seleccionar la base de datos que se va a utilizar. El código de este programita
se muestra a continuación.
/* dbconnect.inc.php */
$conn = mysql_connect("localhost","bingo","holahola");
mysql_select_db("repositorio");

Listando los archivos de la base de datos
Ya que hemos guardado algunos archivos en nuestro repositorio, ahora podemos listar
la información de éstos, para posteriormente descargarlos. Esta es la labor del script que
se muestra a continuación.
/* listar_archivos.php */
require("dbconnect.inc.php");
$qry = "SELECT id, nombre, titulo, tipo FROM archivos";
$res = mysql_query($qry);
while($fila = mysql_fetch_array($res))
{
print "$fila[titulo]
<br>
$fila[nombre] ($fila[tipo])
<br>
<a href='descargar_archivo.php?id=$fila[id]'>Descargar</a>
<br>
<br>";
}

Descargando archivos de la base de datos
Como se puede observar en el código del listado anterior, se ha puesto una liga a un
archivo descargar_archivo.php. La funcionalidad de este programita será la de leer los
datos de los archivos que se encuentran en la base de datos y mandarlos al navegador.
Dependiendo del tipo de archivo del cuál se trate, el navegador podrá mostrar por él
mismo el contenido del archivo.
/* Script descargar_archivo.php */
require("dbconnect.inc.php");
$qry = "SELECT tipo, contenido FROM archivos WHERE id=$id";
$res = mysql_query($qry);
$tipo = mysql_result($res, 0, "tipo");
$contenido = mysql_result($res, 0, "contenido");
header("Content-type: $tipo");
print $contenido;

Comentarios finales
Como se puede observar, el código PHP de los programitas es demasiado simple, y no
tienen ningún grado de dificultad. El código se ha hecho a propósito lo más simple
posible, sin embargo puede adecuarse o tomarse como base para realizar una aplicación
real más completa.

Últimos comentarios
Últimos 5 comentarios
Problema a mistrar imagenes (11/04/2007)
Por
Gustavo Tabares
Hola, pueden ayudarme ya subo las imagenes a la BD y si las consulto individualmente
las puedo ver sin problemas. El problema es cuando trato de meterlas dentro de una
celda en html para centrarla me muestra una cantidad de codigo raro y la imagen por
ningun lado. por favor ayuda

imagenes blob (19/03/2007)
Por
Jordi
Hola amigos,
he escrito el código para poder visualizar imágenes gravadas en la base de datos, de tipo
mediumblob, y al mostrarlas solo se ven caracteres i bits, no se visualiza correctamente
la imagen , además tengo el header content -type como jpeg,
alguna idea ??
Muchas gracias

manipulacion de imagenes mysql y .net (03/03/2007)
Por
elisoft
tengo una base de datos mysql que contiene miles de imagenes, como puedo cargar y
mostralas en un formulario de .net ya sea con c# o vb

SI FUNCIONA (17/02/2007)
Por
MARIA MEDINA
Si funciona muy bien el codigo todo esta muy bien MUCHAS GRACIAS gusto lo que
buscaba bonito y sencillo

descargar con IE (08/02/2007)
Por
tefy
Hola, a mi el codigo me anda ... pero tuve que distinguir entre IE y los demas
exploradores .. alguien sabe como hacerlo sin tener q hacer esto?, ademas desde IE me
pone como nombre del archivo "descargar_archivo" y no el nombre q tiene ... como
hago? este es mi codigo:
$result = query($qry,$conn);
$tipo = result($result, 0, "tipoarchivo");
$contenido = result($result, 0, "archivo");
$nombre= result($result, 0, "nombrearchivo");
//header("Content-type: application/octet-stream");
header("Content-type: $tipo");
if(eregi("MSIE",$_SERVER["HTTP_USER_AGENT"]))
header("Content-Disposition:attachment; filename= '.$nombre.'");
else
header("Content-Disposition:attachment; filename= "$nombre"");
print ("$contenido");
además por ejempli si descargo un pdf desde IE me lo abre en al ventana del IE y no en
el acrobat
espero me puedan ayudar !
saludos
he escrito el código para poder visualizar imágenes gravadas en la base de datos, de tipo
mediumblob, y al mostrarlas solo se ven caracteres i bits, no se visualiza correctamente
la imagen , además tengo el header content -type como jpeg,
alguna idea ??
Muchas gracias

manipulacion de imagenes mysql y .net (03/03/2007)
Por
elisoft
tengo una base de datos mysql que contiene miles de imagenes, como puedo cargar y
mostralas en un formulario de .net ya sea con c# o vb

SI FUNCIONA (17/02/2007)
Por
MARIA MEDINA
Si funciona muy bien el codigo todo esta muy bien MUCHAS GRACIAS gusto lo que
buscaba bonito y sencillo

descargar con IE (08/02/2007)
Por
tefy
Hola, a mi el codigo me anda ... pero tuve que distinguir entre IE y los demas
exploradores .. alguien sabe como hacerlo sin tener q hacer esto?, ademas desde IE me
pone como nombre del archivo "descargar_archivo" y no el nombre q tiene ... como
hago? este es mi codigo:
$result = query($qry,$conn);
$tipo = result($result, 0, "tipoarchivo");
$contenido = result($result, 0, "archivo");
$nombre= result($result, 0, "nombrearchivo");
//header("Content-type: application/octet-stream");
header("Content-type: $tipo");
if(eregi("MSIE",$_SERVER["HTTP_USER_AGENT"]))
header("Content-Disposition:attachment; filename= '.$nombre.'");
else
header("Content-Disposition:attachment; filename= "$nombre"");
print ("$contenido");
además por ejempli si descargo un pdf desde IE me lo abre en al ventana del IE y no en
el acrobat
espero me puedan ayudar !
saludos

Más contenido relacionado

La actualidad más candente

Errores más comunes con WordPress y cómo solucionarlos por Ramón Tomás
Errores más comunes con WordPress y cómo solucionarlos por Ramón TomásErrores más comunes con WordPress y cómo solucionarlos por Ramón Tomás
Errores más comunes con WordPress y cómo solucionarlos por Ramón TomásWordPress Tarragona
 
Administracion servidores
Administracion  servidoresAdministracion  servidores
Administracion servidoresIsaac Gonzalez
 
Mysql3
Mysql3Mysql3
Mysql3polar
 
Apli t1 practicas_apache
Apli t1 practicas_apacheApli t1 practicas_apache
Apli t1 practicas_apachegarciadebora
 
Introdución a la web: HTTP, URL y HTML
Introdución a la web: HTTP, URL y HTMLIntrodución a la web: HTTP, URL y HTML
Introdución a la web: HTTP, URL y HTMLJoaquín Salvachúa
 
Trabajo de compu
Trabajo de compuTrabajo de compu
Trabajo de compuzxyw
 
breve historia www
breve historia wwwbreve historia www
breve historia wwwguest42bf3b0
 
Instalación de MySQL en CentOS 6
Instalación de MySQL en CentOS 6Instalación de MySQL en CentOS 6
Instalación de MySQL en CentOS 6Francisco Medina
 
Lab4, servidor web, junca,aguilar,quijada
Lab4, servidor web, junca,aguilar,quijadaLab4, servidor web, junca,aguilar,quijada
Lab4, servidor web, junca,aguilar,quijadaputernic10
 
ConfiguracióN Del Servidor Dns
ConfiguracióN Del Servidor DnsConfiguracióN Del Servidor Dns
ConfiguracióN Del Servidor DnsDianaBermeo2009
 

La actualidad más candente (18)

Tips mysql
Tips mysqlTips mysql
Tips mysql
 
Errores más comunes con WordPress y cómo solucionarlos por Ramón Tomás
Errores más comunes con WordPress y cómo solucionarlos por Ramón TomásErrores más comunes con WordPress y cómo solucionarlos por Ramón Tomás
Errores más comunes con WordPress y cómo solucionarlos por Ramón Tomás
 
Comandos Unix
Comandos UnixComandos Unix
Comandos Unix
 
Dns
DnsDns
Dns
 
Administracion servidores
Administracion  servidoresAdministracion  servidores
Administracion servidores
 
Mysql3
Mysql3Mysql3
Mysql3
 
Exportar una base de datos
Exportar una base de datosExportar una base de datos
Exportar una base de datos
 
Connection
ConnectionConnection
Connection
 
Apli t1 practicas_apache
Apli t1 practicas_apacheApli t1 practicas_apache
Apli t1 practicas_apache
 
Actividad3.4
Actividad3.4Actividad3.4
Actividad3.4
 
Introdución a la web: HTTP, URL y HTML
Introdución a la web: HTTP, URL y HTMLIntrodución a la web: HTTP, URL y HTML
Introdución a la web: HTTP, URL y HTML
 
Trabajo de compu
Trabajo de compuTrabajo de compu
Trabajo de compu
 
Tema 1 introduccion e instalacion
Tema 1   introduccion e instalacionTema 1   introduccion e instalacion
Tema 1 introduccion e instalacion
 
breve historia www
breve historia wwwbreve historia www
breve historia www
 
php
phpphp
php
 
Instalación de MySQL en CentOS 6
Instalación de MySQL en CentOS 6Instalación de MySQL en CentOS 6
Instalación de MySQL en CentOS 6
 
Lab4, servidor web, junca,aguilar,quijada
Lab4, servidor web, junca,aguilar,quijadaLab4, servidor web, junca,aguilar,quijada
Lab4, servidor web, junca,aguilar,quijada
 
ConfiguracióN Del Servidor Dns
ConfiguracióN Del Servidor DnsConfiguracióN Del Servidor Dns
ConfiguracióN Del Servidor Dns
 

Destacado

A encarnação e o nascimento de cristo (charles haddon spurgeon)
A encarnação e o nascimento de cristo (charles haddon spurgeon)A encarnação e o nascimento de cristo (charles haddon spurgeon)
A encarnação e o nascimento de cristo (charles haddon spurgeon)Deusdete Soares
 
Cerrando la brecha digital en uruguay luis yarzabal
Cerrando la brecha digital en uruguay   luis yarzabalCerrando la brecha digital en uruguay   luis yarzabal
Cerrando la brecha digital en uruguay luis yarzabalcristrod
 
Mapa conceptual unidades iv y v
Mapa conceptual unidades iv y vMapa conceptual unidades iv y v
Mapa conceptual unidades iv y vVanessa Marin
 
A causa da doenças.
A causa da doenças.A causa da doenças.
A causa da doenças.clebison
 
Carta con campos
Carta con camposCarta con campos
Carta con camposMay Pérez
 
Agricultura familiar e os elementos que compõem a relação homem natureza
Agricultura familiar e os elementos que compõem a relação homem naturezaAgricultura familiar e os elementos que compõem a relação homem natureza
Agricultura familiar e os elementos que compõem a relação homem naturezaEnzo Santana Mutti
 
La Huella Ambiental de la UE: herramienta básica para la Gestión Ambiental de...
La Huella Ambiental de la UE: herramienta básica para la Gestión Ambiental de...La Huella Ambiental de la UE: herramienta básica para la Gestión Ambiental de...
La Huella Ambiental de la UE: herramienta básica para la Gestión Ambiental de...ABALEO, S.L.
 
Origen y evolución de cuentos infantiles
Origen y evolución de cuentos infantilesOrigen y evolución de cuentos infantiles
Origen y evolución de cuentos infantilessylviacristinachamba
 
Diapositivas trabajo
Diapositivas trabajoDiapositivas trabajo
Diapositivas trabajoocampomariana
 
A primeira aparição de nosso senhor perante pilatos (charles h. spurgeon)
A primeira aparição de nosso senhor perante pilatos (charles h. spurgeon)A primeira aparição de nosso senhor perante pilatos (charles h. spurgeon)
A primeira aparição de nosso senhor perante pilatos (charles h. spurgeon)Deusdete Soares
 
Power point Perez & Marchi
Power point Perez & MarchiPower point Perez & Marchi
Power point Perez & MarchiMarchi&Perez
 
Marcha indígena en defensa del tipnis por que no se construya la carretera is...
Marcha indígena en defensa del tipnis por que no se construya la carretera is...Marcha indígena en defensa del tipnis por que no se construya la carretera is...
Marcha indígena en defensa del tipnis por que no se construya la carretera is...Wilfredo Lima
 

Destacado (20)

A encarnação e o nascimento de cristo (charles haddon spurgeon)
A encarnação e o nascimento de cristo (charles haddon spurgeon)A encarnação e o nascimento de cristo (charles haddon spurgeon)
A encarnação e o nascimento de cristo (charles haddon spurgeon)
 
Cerrando la brecha digital en uruguay luis yarzabal
Cerrando la brecha digital en uruguay   luis yarzabalCerrando la brecha digital en uruguay   luis yarzabal
Cerrando la brecha digital en uruguay luis yarzabal
 
Halo
HaloHalo
Halo
 
Mapa conceptual unidades iv y v
Mapa conceptual unidades iv y vMapa conceptual unidades iv y v
Mapa conceptual unidades iv y v
 
Tipos de redes
Tipos de redesTipos de redes
Tipos de redes
 
A causa da doenças.
A causa da doenças.A causa da doenças.
A causa da doenças.
 
Tarifas móvil
Tarifas móvilTarifas móvil
Tarifas móvil
 
Carta con campos
Carta con camposCarta con campos
Carta con campos
 
Agricultura familiar e os elementos que compõem a relação homem natureza
Agricultura familiar e os elementos que compõem a relação homem naturezaAgricultura familiar e os elementos que compõem a relação homem natureza
Agricultura familiar e os elementos que compõem a relação homem natureza
 
ses df
ses dfses df
ses df
 
La Huella Ambiental de la UE: herramienta básica para la Gestión Ambiental de...
La Huella Ambiental de la UE: herramienta básica para la Gestión Ambiental de...La Huella Ambiental de la UE: herramienta básica para la Gestión Ambiental de...
La Huella Ambiental de la UE: herramienta básica para la Gestión Ambiental de...
 
Origen y evolución de cuentos infantiles
Origen y evolución de cuentos infantilesOrigen y evolución de cuentos infantiles
Origen y evolución de cuentos infantiles
 
Sabías..
Sabías..Sabías..
Sabías..
 
Kanon Wakeshima
Kanon Wakeshima Kanon Wakeshima
Kanon Wakeshima
 
Diapositivas trabajo
Diapositivas trabajoDiapositivas trabajo
Diapositivas trabajo
 
Paulo freire
Paulo freirePaulo freire
Paulo freire
 
A primeira aparição de nosso senhor perante pilatos (charles h. spurgeon)
A primeira aparição de nosso senhor perante pilatos (charles h. spurgeon)A primeira aparição de nosso senhor perante pilatos (charles h. spurgeon)
A primeira aparição de nosso senhor perante pilatos (charles h. spurgeon)
 
Calidad de los contenidos
Calidad de los contenidosCalidad de los contenidos
Calidad de los contenidos
 
Power point Perez & Marchi
Power point Perez & MarchiPower point Perez & Marchi
Power point Perez & Marchi
 
Marcha indígena en defensa del tipnis por que no se construya la carretera is...
Marcha indígena en defensa del tipnis por que no se construya la carretera is...Marcha indígena en defensa del tipnis por que no se construya la carretera is...
Marcha indígena en defensa del tipnis por que no se construya la carretera is...
 

Similar a Manejo de datos blob con php y my sql

Similar a Manejo de datos blob con php y my sql (20)

Php y MySqul
Php y MySqul  Php y MySqul
Php y MySqul
 
Hacking uploaders
Hacking uploadersHacking uploaders
Hacking uploaders
 
56 Php. Transferencia De Ficheros
56 Php. Transferencia De Ficheros56 Php. Transferencia De Ficheros
56 Php. Transferencia De Ficheros
 
Manejo de archivos
Manejo de archivosManejo de archivos
Manejo de archivos
 
Acceso a-base-de-datos-en-php
Acceso a-base-de-datos-en-phpAcceso a-base-de-datos-en-php
Acceso a-base-de-datos-en-php
 
78 Php. Headers Y Visualizacion
78 Php. Headers Y Visualizacion78 Php. Headers Y Visualizacion
78 Php. Headers Y Visualizacion
 
Unidad 3 ficheros
Unidad 3 ficherosUnidad 3 ficheros
Unidad 3 ficheros
 
CMS Gregarius
CMS Gregarius CMS Gregarius
CMS Gregarius
 
Desarrollo de sistios web
Desarrollo de sistios webDesarrollo de sistios web
Desarrollo de sistios web
 
2 7 ficheros_php
2 7 ficheros_php2 7 ficheros_php
2 7 ficheros_php
 
Servidor apache
Servidor apacheServidor apache
Servidor apache
 
Laboratorio 3 Andres Moreno
Laboratorio 3 Andres MorenoLaboratorio 3 Andres Moreno
Laboratorio 3 Andres Moreno
 
mejorando con php
mejorando con phpmejorando con php
mejorando con php
 
nn
nnnn
nn
 
07 Php. Instalando Php My Admin
07 Php. Instalando Php My Admin07 Php. Instalando Php My Admin
07 Php. Instalando Php My Admin
 
Administración de un rss (gregarios o gregarius)
Administración de un rss (gregarios o gregarius)Administración de un rss (gregarios o gregarius)
Administración de un rss (gregarios o gregarius)
 
Manual oscommerce
Manual oscommerceManual oscommerce
Manual oscommerce
 
PHP Tema 7 - Seguridad
PHP Tema 7 - SeguridadPHP Tema 7 - Seguridad
PHP Tema 7 - Seguridad
 
Práctica web de la sesión 8.pptx
Práctica web de la sesión 8.pptxPráctica web de la sesión 8.pptx
Práctica web de la sesión 8.pptx
 
Phpmyadmin
PhpmyadminPhpmyadmin
Phpmyadmin
 

Último

Mapa-conceptual-del-Origen-del-Universo-3.pptx
Mapa-conceptual-del-Origen-del-Universo-3.pptxMapa-conceptual-del-Origen-del-Universo-3.pptx
Mapa-conceptual-del-Origen-del-Universo-3.pptxMidwarHenryLOZAFLORE
 
dokumen.tips_36274588-sistema-heui-eui.ppt
dokumen.tips_36274588-sistema-heui-eui.pptdokumen.tips_36274588-sistema-heui-eui.ppt
dokumen.tips_36274588-sistema-heui-eui.pptMiguelAtencio10
 
Actividad integradora 6 CREAR UN RECURSO MULTIMEDIA
Actividad integradora 6    CREAR UN RECURSO MULTIMEDIAActividad integradora 6    CREAR UN RECURSO MULTIMEDIA
Actividad integradora 6 CREAR UN RECURSO MULTIMEDIA241531640
 
GonzalezGonzalez_Karina_M1S3AI6... .pptx
GonzalezGonzalez_Karina_M1S3AI6... .pptxGonzalezGonzalez_Karina_M1S3AI6... .pptx
GonzalezGonzalez_Karina_M1S3AI6... .pptx241523733
 
TEMA 2 PROTOCOLO DE EXTRACCION VEHICULAR.ppt
TEMA 2 PROTOCOLO DE EXTRACCION VEHICULAR.pptTEMA 2 PROTOCOLO DE EXTRACCION VEHICULAR.ppt
TEMA 2 PROTOCOLO DE EXTRACCION VEHICULAR.pptJavierHerrera662252
 
Hernandez_Hernandez_Practica web de la sesion 11.pptx
Hernandez_Hernandez_Practica web de la sesion 11.pptxHernandez_Hernandez_Practica web de la sesion 11.pptx
Hernandez_Hernandez_Practica web de la sesion 11.pptxJOSEMANUELHERNANDEZH11
 
El_Blog_como_herramienta_de_publicacion_y_consulta_de_investigacion.pptx
El_Blog_como_herramienta_de_publicacion_y_consulta_de_investigacion.pptxEl_Blog_como_herramienta_de_publicacion_y_consulta_de_investigacion.pptx
El_Blog_como_herramienta_de_publicacion_y_consulta_de_investigacion.pptxAlexander López
 
FloresMorales_Montserrath_M1S3AI6 (1).pptx
FloresMorales_Montserrath_M1S3AI6 (1).pptxFloresMorales_Montserrath_M1S3AI6 (1).pptx
FloresMorales_Montserrath_M1S3AI6 (1).pptx241522327
 
Segunda ley de la termodinámica TERMODINAMICA.pptx
Segunda ley de la termodinámica TERMODINAMICA.pptxSegunda ley de la termodinámica TERMODINAMICA.pptx
Segunda ley de la termodinámica TERMODINAMICA.pptxMariaBurgos55
 
El uso de las tic en la vida ,lo importante que son
El uso de las tic en la vida ,lo importante  que sonEl uso de las tic en la vida ,lo importante  que son
El uso de las tic en la vida ,lo importante que son241514984
 
R1600G CAT Variables de cargadores en mina
R1600G CAT Variables de cargadores en minaR1600G CAT Variables de cargadores en mina
R1600G CAT Variables de cargadores en minaarkananubis
 
Plan Sarmiento - Netbook del GCBA 2019..
Plan Sarmiento - Netbook del GCBA 2019..Plan Sarmiento - Netbook del GCBA 2019..
Plan Sarmiento - Netbook del GCBA 2019..RobertoGumucio2
 
Google-Meet-como-herramienta-para-realizar-reuniones-virtuales.pptx
Google-Meet-como-herramienta-para-realizar-reuniones-virtuales.pptxGoogle-Meet-como-herramienta-para-realizar-reuniones-virtuales.pptx
Google-Meet-como-herramienta-para-realizar-reuniones-virtuales.pptxAlexander López
 
definicion segun autores de matemáticas educativa
definicion segun autores de matemáticas  educativadefinicion segun autores de matemáticas  educativa
definicion segun autores de matemáticas educativaAdrianaMartnez618894
 
Medidas de formas, coeficiente de asimetría y coeficiente de curtosis.pptx
Medidas de formas, coeficiente de asimetría y coeficiente de curtosis.pptxMedidas de formas, coeficiente de asimetría y coeficiente de curtosis.pptx
Medidas de formas, coeficiente de asimetría y coeficiente de curtosis.pptxaylincamaho
 
Presentación inteligencia artificial en la actualidad
Presentación inteligencia artificial en la actualidadPresentación inteligencia artificial en la actualidad
Presentación inteligencia artificial en la actualidadMiguelAngelVillanuev48
 
La era de la educación digital y sus desafios
La era de la educación digital y sus desafiosLa era de la educación digital y sus desafios
La era de la educación digital y sus desafiosFundación YOD YOD
 
LAS_TIC_COMO_HERRAMIENTAS_EN_LA_INVESTIGACIÓN.pptx
LAS_TIC_COMO_HERRAMIENTAS_EN_LA_INVESTIGACIÓN.pptxLAS_TIC_COMO_HERRAMIENTAS_EN_LA_INVESTIGACIÓN.pptx
LAS_TIC_COMO_HERRAMIENTAS_EN_LA_INVESTIGACIÓN.pptxAlexander López
 
Arenas Camacho-Practica tarea Sesión 12.pptx
Arenas Camacho-Practica tarea Sesión 12.pptxArenas Camacho-Practica tarea Sesión 12.pptx
Arenas Camacho-Practica tarea Sesión 12.pptxJOSEFERNANDOARENASCA
 
Crear un recurso multimedia. Maricela_Ponce_DomingoM1S3AI6-1.pptx
Crear un recurso multimedia. Maricela_Ponce_DomingoM1S3AI6-1.pptxCrear un recurso multimedia. Maricela_Ponce_DomingoM1S3AI6-1.pptx
Crear un recurso multimedia. Maricela_Ponce_DomingoM1S3AI6-1.pptxNombre Apellidos
 

Último (20)

Mapa-conceptual-del-Origen-del-Universo-3.pptx
Mapa-conceptual-del-Origen-del-Universo-3.pptxMapa-conceptual-del-Origen-del-Universo-3.pptx
Mapa-conceptual-del-Origen-del-Universo-3.pptx
 
dokumen.tips_36274588-sistema-heui-eui.ppt
dokumen.tips_36274588-sistema-heui-eui.pptdokumen.tips_36274588-sistema-heui-eui.ppt
dokumen.tips_36274588-sistema-heui-eui.ppt
 
Actividad integradora 6 CREAR UN RECURSO MULTIMEDIA
Actividad integradora 6    CREAR UN RECURSO MULTIMEDIAActividad integradora 6    CREAR UN RECURSO MULTIMEDIA
Actividad integradora 6 CREAR UN RECURSO MULTIMEDIA
 
GonzalezGonzalez_Karina_M1S3AI6... .pptx
GonzalezGonzalez_Karina_M1S3AI6... .pptxGonzalezGonzalez_Karina_M1S3AI6... .pptx
GonzalezGonzalez_Karina_M1S3AI6... .pptx
 
TEMA 2 PROTOCOLO DE EXTRACCION VEHICULAR.ppt
TEMA 2 PROTOCOLO DE EXTRACCION VEHICULAR.pptTEMA 2 PROTOCOLO DE EXTRACCION VEHICULAR.ppt
TEMA 2 PROTOCOLO DE EXTRACCION VEHICULAR.ppt
 
Hernandez_Hernandez_Practica web de la sesion 11.pptx
Hernandez_Hernandez_Practica web de la sesion 11.pptxHernandez_Hernandez_Practica web de la sesion 11.pptx
Hernandez_Hernandez_Practica web de la sesion 11.pptx
 
El_Blog_como_herramienta_de_publicacion_y_consulta_de_investigacion.pptx
El_Blog_como_herramienta_de_publicacion_y_consulta_de_investigacion.pptxEl_Blog_como_herramienta_de_publicacion_y_consulta_de_investigacion.pptx
El_Blog_como_herramienta_de_publicacion_y_consulta_de_investigacion.pptx
 
FloresMorales_Montserrath_M1S3AI6 (1).pptx
FloresMorales_Montserrath_M1S3AI6 (1).pptxFloresMorales_Montserrath_M1S3AI6 (1).pptx
FloresMorales_Montserrath_M1S3AI6 (1).pptx
 
Segunda ley de la termodinámica TERMODINAMICA.pptx
Segunda ley de la termodinámica TERMODINAMICA.pptxSegunda ley de la termodinámica TERMODINAMICA.pptx
Segunda ley de la termodinámica TERMODINAMICA.pptx
 
El uso de las tic en la vida ,lo importante que son
El uso de las tic en la vida ,lo importante  que sonEl uso de las tic en la vida ,lo importante  que son
El uso de las tic en la vida ,lo importante que son
 
R1600G CAT Variables de cargadores en mina
R1600G CAT Variables de cargadores en minaR1600G CAT Variables de cargadores en mina
R1600G CAT Variables de cargadores en mina
 
Plan Sarmiento - Netbook del GCBA 2019..
Plan Sarmiento - Netbook del GCBA 2019..Plan Sarmiento - Netbook del GCBA 2019..
Plan Sarmiento - Netbook del GCBA 2019..
 
Google-Meet-como-herramienta-para-realizar-reuniones-virtuales.pptx
Google-Meet-como-herramienta-para-realizar-reuniones-virtuales.pptxGoogle-Meet-como-herramienta-para-realizar-reuniones-virtuales.pptx
Google-Meet-como-herramienta-para-realizar-reuniones-virtuales.pptx
 
definicion segun autores de matemáticas educativa
definicion segun autores de matemáticas  educativadefinicion segun autores de matemáticas  educativa
definicion segun autores de matemáticas educativa
 
Medidas de formas, coeficiente de asimetría y coeficiente de curtosis.pptx
Medidas de formas, coeficiente de asimetría y coeficiente de curtosis.pptxMedidas de formas, coeficiente de asimetría y coeficiente de curtosis.pptx
Medidas de formas, coeficiente de asimetría y coeficiente de curtosis.pptx
 
Presentación inteligencia artificial en la actualidad
Presentación inteligencia artificial en la actualidadPresentación inteligencia artificial en la actualidad
Presentación inteligencia artificial en la actualidad
 
La era de la educación digital y sus desafios
La era de la educación digital y sus desafiosLa era de la educación digital y sus desafios
La era de la educación digital y sus desafios
 
LAS_TIC_COMO_HERRAMIENTAS_EN_LA_INVESTIGACIÓN.pptx
LAS_TIC_COMO_HERRAMIENTAS_EN_LA_INVESTIGACIÓN.pptxLAS_TIC_COMO_HERRAMIENTAS_EN_LA_INVESTIGACIÓN.pptx
LAS_TIC_COMO_HERRAMIENTAS_EN_LA_INVESTIGACIÓN.pptx
 
Arenas Camacho-Practica tarea Sesión 12.pptx
Arenas Camacho-Practica tarea Sesión 12.pptxArenas Camacho-Practica tarea Sesión 12.pptx
Arenas Camacho-Practica tarea Sesión 12.pptx
 
Crear un recurso multimedia. Maricela_Ponce_DomingoM1S3AI6-1.pptx
Crear un recurso multimedia. Maricela_Ponce_DomingoM1S3AI6-1.pptxCrear un recurso multimedia. Maricela_Ponce_DomingoM1S3AI6-1.pptx
Crear un recurso multimedia. Maricela_Ponce_DomingoM1S3AI6-1.pptx
 

Manejo de datos blob con php y my sql

  • 1. Manejo de datos BLOB con PHP y MySQL Autor: MySQL Hispano 1 . Creando la base de datos 2 . Agregando archivos a la base de datos 3 . Listando los archivos de la base de datos 4 . Descargando archivos de la base de datos 5 . Comentarios finales Cedido por MySQL Hispano. Sin duda alguna, una de las preguntas más frecuentes en relación a MySQL es, "¿Cómo puedo almacenar archivos en una base de datos?". La respuesta es, se tienen que usar los tipos de datos BLOB. Estos BLOBs (Binary Large Objects) pueden almacenar prácticamente cualquier tipo de datos, incluyendo documentos de MS Word, imagenes gif/jpeg, archivos PDF, MP3s, etc. En este artículo vamos a mostrar como crear un repositorio de archivos binarios usando PHP y MySQL para poder almacenar diferentes tipos de archivos. Veremos como almacenar cada uno de los archivos en una base de datos, para posteriormente recuperarlos. Para probar los ejemplos en este artículo, es necesario tener acceso a un servidor con soporte para PHP, además de contar con un servidor MySQL. Se asume que se cuentan con los privilegios apropiados para crear la base de datos, y que MySQL está corriendo en el mismo servidor que PHP. Creando la base de datos Nuestro repositorio de documentos usará una base de datos que contenga únicamente una tabla para almacenar dichos documentos. [eduardo@casita]$ mysqladmin create repositorio [eduardo@casita]$ [eduardo@casita]$ mysql repositorio Welcome to the MySQL monitor. Commands end with ; or g. Your MySQL connection id is 139 to server version: 3.23.41 Type 'help;' or 'h' for help. Type 'c' to clear the buffer. mysql> CREATE TABLE archivos( -> id int not null auto_increment primary key, -> nombre varchar(50), -> titulo varchar(50), -> contenido mediumblob, -> tipo varchar(50)); Query OK, 0 rows affected (0.01 sec)
  • 2. mysql> grant all on repositorio.* to bingo@localhost identified by 'holahola' Query OK, 0 rows affected (0.46 sec) Ahora tenemos una base de datos llamada repositorio, la cual contiene una tabla llamada archivos. Los detalles de cada campo en la tabla archivos se muestra a continuación: • • • • • id - Un número entero que nos proporcionará un identificador único para cada archivo que iremos almacenando. Éste se irá incrementando automáticamente cada vez que se vaya agregando un nuevo registro. nombre - El nombre original del archivo, por ejemplo, foto.gif, curriculum.doc, etc titulo - Una breve descripción de cada archivo que se irá guardando en la tabla, por ejemplo "Cartita para mi novia", o "La foto de mi perro". Este título será usado posteriormente al estar revisando los archivos de nuestro repositorio a través de una página web. contenido - Un campo de tipo binario (blob) para guardar el contenido de cada archivo. En nuestra tabla hemos usado un tipo mediumblob, el cuál puede almacenar archivos hasta de 16MB. tipo - Como veremos más adelante, cada archivo (ya sea un .doc, .gif, .pdf, etc) tiene un tipo único. Cuando se envía un archivo hacía el servidor web a través de una página web, el navegador le envía al servidor la información acerca del tipo del archivo, o bien, del tipo de contenido del archivo. Los tipos de contenido son simples cadenas. El tipo de contenido para un archivo MS Word es "application/msword", el tipo de contenido para una imagen GIF es "image/gif", etc. Agregando archivos a la base de datos Ahora que tenemos lista la base de datos que servirá como repositorio de nuestros archivos, vamos a crear un simple página web que permita seleccionar un archivo desde el navegador para posteriormente enviarlo a un script en PHP que se va a encargar de almacenarlo en nuestra base de datos. La página web será nombrada escoger_archivo.html y el script en PHP se llamará guardar_archivo.php. La página web puede contener todo el código HTML que se desee, pero es necesario que se incluya el siguiente formulario para que se tenga la opción de escoger un archivo y enviarlo al servidor. <form enctype="multipart/form-data" action="guardar_archivo.php" method="post"> Descripción <input type="text" name="titulo" size="30"> Ubicación <input type="file" name="archivito"> <input type="submit" value="Enviar archivo"> </form> Del código que hemos escrito tenemos que subrayar lo siguiente:
  • 3. • • • El formulario necesita un atributo enctype con un valor multipart/formdata. El método de envío tiene que ser POST. Se tiene que usar por lo menos un campo del tipo file Estos son los tres requerimientos básicos que debe cumplir la página HTML que servirá para subir los archivos al servidor. Antes de escribir el código del script guarda_archivo.php, vamos a comentar algo acerca de la forma en como se tomaran los datos del archivo que se va a recibir. Desde la versión 4.1 de PHP se recomienda se utilice el arreglo $_FILES para leer los datos del archivo que se está subiendo al servidor. A continuación se listan los elementos que contiene este arreglo. Nótese que el nombre de los índices del arreglo depende de como se haya nombrado el campo del tipo file en el formulario. $_FILES['archivito']['name'] Es el nombre original del archivo. $_FILES['archivito']['type'] El tipo MIME del archivo,.. image/gif, application/pdf, application/msword,.. etc $_FILES['archivito']['size'] El tamaño del archivo en bytes. $_FILES['archivito']['tmp_name'] La ubicación del archivo temporal que se crea cuando se sube un archivo al servidor. Es en esta variable de donde se leen los datos del archivo en sí. Si estos datos no son copiados o movidos a otro lugar, o en nuestro caso, almacenados en una base de datos, se pueden perder, ya que PHP elimina este archivo después de un determinado tiempo. Por ejemplo, estos son los posibles valores para un archivo j-odbc.zip que se ha subido al servidor: $_FILES["archivito"][name] => j-jdbc.zip $_FILES["archivito"][type] => application/zip $_FILES["archivito"][tmp_name] => /tmp/phpvXQpqP $_FILES["archivito"][size] => 337945 Cabe mencionar que se tienen que revisar, y en su caso modificar las siguientes variables del archivo de configuración de PHP para que se puedan subir los archivos al servidor, y puedan ser correctamente manejados por un script de PHP. • • • file_uploads - Le dice a PHP si se pueden, ó no, subir archivos al servidor. Esta variable debe tener el valor "On". upload_max_filesize - Le indica a PHP cuál es el tamaño máximo del archivo que se puede aceptar. Se puede utilizar el sufijo "M" para indicar el valor en MegaBytes, por ejemplo, con un valor 2M se acepta un archivo máximo de 2 MegaBytes. upload_tmp_dir - Es el directorio en el que se copia temporalmente el contenido del archivo cuando se sube al servidor. Ahora es el momento de mostrar el código del script en PHP que va a guardar el archivo en nuestra base de datos.
  • 4. /* guardar_archivo.php */ require("dbconnect.inc.php"); $archivo $tamanio $tipo $nombre $titulo = = = = = $_FILES["archivito"]["tmp_name"]; $_FILES["archivito"]["size"]; $_FILES["archivito"]["type"]; $_FILES["archivito"]["name"]; $_POST["titulo"]; if ( $archivo != "none" ) { $fp = fopen($archivo, "rb"); $contenido = fread($fp, $tamanio); $contenido = addslashes($contenido); fclose($fp); $qry = "INSERT INTO archivos VALUES (0,'$nombre','$titulo','$contenido','$tipo')"; mysql_query($qry); if(mysql_affected_rows($conn) > 0) print "Se ha guardado el archivo en la base de datos."; else print "NO se ha podido guardar el archivo en la base de datos."; } else print "No se ha podido subir el archivo al servidor"; El archivo dbconnect.inc.php contiene únicamente las instrucciones para conectarse a MySQL y seleccionar la base de datos que se va a utilizar. El código de este programita se muestra a continuación. /* dbconnect.inc.php */ $conn = mysql_connect("localhost","bingo","holahola"); mysql_select_db("repositorio"); Listando los archivos de la base de datos Ya que hemos guardado algunos archivos en nuestro repositorio, ahora podemos listar la información de éstos, para posteriormente descargarlos. Esta es la labor del script que se muestra a continuación. /* listar_archivos.php */ require("dbconnect.inc.php"); $qry = "SELECT id, nombre, titulo, tipo FROM archivos"; $res = mysql_query($qry); while($fila = mysql_fetch_array($res)) { print "$fila[titulo] <br> $fila[nombre] ($fila[tipo])
  • 5. <br> <a href='descargar_archivo.php?id=$fila[id]'>Descargar</a> <br> <br>"; } Descargando archivos de la base de datos Como se puede observar en el código del listado anterior, se ha puesto una liga a un archivo descargar_archivo.php. La funcionalidad de este programita será la de leer los datos de los archivos que se encuentran en la base de datos y mandarlos al navegador. Dependiendo del tipo de archivo del cuál se trate, el navegador podrá mostrar por él mismo el contenido del archivo. /* Script descargar_archivo.php */ require("dbconnect.inc.php"); $qry = "SELECT tipo, contenido FROM archivos WHERE id=$id"; $res = mysql_query($qry); $tipo = mysql_result($res, 0, "tipo"); $contenido = mysql_result($res, 0, "contenido"); header("Content-type: $tipo"); print $contenido; Comentarios finales Como se puede observar, el código PHP de los programitas es demasiado simple, y no tienen ningún grado de dificultad. El código se ha hecho a propósito lo más simple posible, sin embargo puede adecuarse o tomarse como base para realizar una aplicación real más completa. Últimos comentarios Últimos 5 comentarios Problema a mistrar imagenes (11/04/2007) Por Gustavo Tabares Hola, pueden ayudarme ya subo las imagenes a la BD y si las consulto individualmente las puedo ver sin problemas. El problema es cuando trato de meterlas dentro de una celda en html para centrarla me muestra una cantidad de codigo raro y la imagen por ningun lado. por favor ayuda imagenes blob (19/03/2007) Por Jordi Hola amigos,
  • 6. he escrito el código para poder visualizar imágenes gravadas en la base de datos, de tipo mediumblob, y al mostrarlas solo se ven caracteres i bits, no se visualiza correctamente la imagen , además tengo el header content -type como jpeg, alguna idea ?? Muchas gracias manipulacion de imagenes mysql y .net (03/03/2007) Por elisoft tengo una base de datos mysql que contiene miles de imagenes, como puedo cargar y mostralas en un formulario de .net ya sea con c# o vb SI FUNCIONA (17/02/2007) Por MARIA MEDINA Si funciona muy bien el codigo todo esta muy bien MUCHAS GRACIAS gusto lo que buscaba bonito y sencillo descargar con IE (08/02/2007) Por tefy Hola, a mi el codigo me anda ... pero tuve que distinguir entre IE y los demas exploradores .. alguien sabe como hacerlo sin tener q hacer esto?, ademas desde IE me pone como nombre del archivo "descargar_archivo" y no el nombre q tiene ... como hago? este es mi codigo: $result = query($qry,$conn); $tipo = result($result, 0, "tipoarchivo"); $contenido = result($result, 0, "archivo"); $nombre= result($result, 0, "nombrearchivo"); //header("Content-type: application/octet-stream"); header("Content-type: $tipo"); if(eregi("MSIE",$_SERVER["HTTP_USER_AGENT"])) header("Content-Disposition:attachment; filename= '.$nombre.'"); else header("Content-Disposition:attachment; filename= "$nombre""); print ("$contenido"); además por ejempli si descargo un pdf desde IE me lo abre en al ventana del IE y no en el acrobat espero me puedan ayudar ! saludos
  • 7. he escrito el código para poder visualizar imágenes gravadas en la base de datos, de tipo mediumblob, y al mostrarlas solo se ven caracteres i bits, no se visualiza correctamente la imagen , además tengo el header content -type como jpeg, alguna idea ?? Muchas gracias manipulacion de imagenes mysql y .net (03/03/2007) Por elisoft tengo una base de datos mysql que contiene miles de imagenes, como puedo cargar y mostralas en un formulario de .net ya sea con c# o vb SI FUNCIONA (17/02/2007) Por MARIA MEDINA Si funciona muy bien el codigo todo esta muy bien MUCHAS GRACIAS gusto lo que buscaba bonito y sencillo descargar con IE (08/02/2007) Por tefy Hola, a mi el codigo me anda ... pero tuve que distinguir entre IE y los demas exploradores .. alguien sabe como hacerlo sin tener q hacer esto?, ademas desde IE me pone como nombre del archivo "descargar_archivo" y no el nombre q tiene ... como hago? este es mi codigo: $result = query($qry,$conn); $tipo = result($result, 0, "tipoarchivo"); $contenido = result($result, 0, "archivo"); $nombre= result($result, 0, "nombrearchivo"); //header("Content-type: application/octet-stream"); header("Content-type: $tipo"); if(eregi("MSIE",$_SERVER["HTTP_USER_AGENT"])) header("Content-Disposition:attachment; filename= '.$nombre.'"); else header("Content-Disposition:attachment; filename= "$nombre""); print ("$contenido"); además por ejempli si descargo un pdf desde IE me lo abre en al ventana del IE y no en el acrobat espero me puedan ayudar ! saludos