Foros del Web » Programando para Internet » PHP »

Descargar archivos traidos del codigo binario de la base de datos

Estas en el tema de Descargar archivos traidos del codigo binario de la base de datos en el foro de PHP en Foros del Web. existe alguna posibilidad de crear alguna pagina en php con un formulario en el cual selecciono un archivo X (.exe .mp3 .wmv .dll etc...) y ...
  #1 (permalink)  
Antiguo 02/04/2008, 11:11
Avatar de farra  
Fecha de Ingreso: marzo-2008
Ubicación: Aqui estoy
Mensajes: 574
Antigüedad: 16 años, 8 meses
Puntos: 20
Exclamación guardar codigo binario en base de datos

existe alguna posibilidad de crear alguna pagina en php con un formulario en el cual selecciono un archivo X (.exe .mp3 .wmv .dll etc...) y guardo el codigo binario del archivo en la base de datos...

TABLA ArchivosBin

Campos:
Id (int) 10
NombreArchivo (varchar) 50
ExtencionArchivo (varchar) 4
CodigoBin (text)
Fechapublic (date)
IPpub (varchar) 50


Luego en otra pagina selecciono los archivos listando por nombrfe de archivo, una ves seleccionado el archivo o los archivos a construir aprieto el boton "Generar" y me genera en una carpeta de mi servidor y en la pagina salen los links para hacer download de los archivos con una cuenta regresiva de 10 minutos...

luego otra tarea programada que borra los archivos del server...

el codigo binario esta encriptado en las bases de datos y luego lo desencrypto


es posible hacer esto? como?
  #2 (permalink)  
Antiguo 02/04/2008, 11:45
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 18 años, 6 meses
Puntos: 2135
Re: guardar codigo binario en base de datos

Hola farra,

Revisa este aporte:
http://www.forosdelweb.com/f18/tutor...inario-127775/

Saludos.
  #3 (permalink)  
Antiguo 02/04/2008, 15:08
Avatar de farra  
Fecha de Ingreso: marzo-2008
Ubicación: Aqui estoy
Mensajes: 574
Antigüedad: 16 años, 8 meses
Puntos: 20
Descargar archivos traidos del codigo binario de la base de datos

Base de datos:

Código:
-- 
-- Estructura de tabla para la tabla `archivos` 
-- 

CREATE TABLE `archivos` ( 
`id` int(10) unsigned NOT NULL auto_increment, 
`archivo_binario` longblob NOT NULL, 
`archivo_nombre` varchar(255) NOT NULL default '', 
`archivo_peso` varchar(15) NOT NULL default '', 
`archivo_tipo` varchar(25) NOT NULL default '', 
PRIMARY KEY (`id`) 
) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=10 ;
Formulario:

Código HTML:
<HTML> 
<HEAD> 
<TITLE>Binario a BD</TITLE> 
</HEAD> 
<BODY> 
<br><br> 
<FORM> 
<div> 
<p><strong>Archivo: </strong></p> 
<p> 
<INPUT> 
</p> 
<p> 
<INPUT> 
</p> 
</div> 
</FORM> <br><br> 
<div> 
<php> 
</div> 
</BODY> 
</HTML> 


Codigo para insertar:

Código:


Código PHP:
//Primero, arranca el bloque PHP y checkea si el archivo tiene nombre.  Si no fue asi, te remite de nuevo al formulario de inserción: 
// No se comprueba aqui si se ha subido correctamente. 
if (empty($_FILES['archivo']['name'])){ 
header("location: formulario.php?proceso=falta_indicar_fichero"); //o como se llame el formulario .. 
exit; 


//establece una conexión con la base de datos. 
$conexion mysql_connect("localhost","root","") or die("No se pudo realizar la conexion con el servidor."); 
mysql_select_db("archivos",$conexion) or die("No se puede seleccionar BD"); // tu_bd es el nombre de la Base de datos .. por siaca. 

// archivo temporal (ruta y nombre). 
$binario_nombre_temporal=$_FILES['archivo']['tmp_name'] ; 

// leer del archvio temporal .. el binario subido. 
// "rb" para Windows .. Linux parece q con "r" sobra ... 
$binario_contenido addslashes(fread(fopen($binario_nombre_temporal"rb"), filesize($binario_nombre_temporal))); 

// Obtener del array FILES (superglobal) los datos del binario .. nombre, tabamo y tipo. 
$binario_nombre=$_FILES['archivo']['name']; 
$binario_peso=$_FILES['archivo']['size']; 
$binario_tipo=$_FILES['archivo']['type']; 

//insertamos los datos en la BD. 
$consulta_insertar "INSERT INTO archivos (id, archivo_binario, archivo_nombre, archivo_peso, archivo_tipo) VALUES ('', '$binario_contenido', '$binario_nombre', '$binario_peso', '$binario_tipo')"
mysql_query($consulta_insertar,$conexion) or die("No se pudo insertar los datos en la base de datos."); 
$donde=mysql_insert_id(); 
header("location: inserto.php?id=".$donde);  // si ha ido todo bien 
exit; 


Codigo para ver:

Código:

Código PHP:
// OJO, sólo funciona con imagnes en formato JPEG ... 

if(isset($_GET['id'])) { 

    
$conexion=mysql_connect("localhost","root","") or die ("no se ha podido conectar a la BD"); 
    
mysql_select_db("archivos") or die ("no se ha podido seleccionar la BD"); 
    
$sql "SELECT archivo_binario,archivo_tipo,archivo_nombre FROM archivos WHERE id='".$_GET['id']."'"
    
$consulta mysql_query($sql,$conexion); 
    
$imagen mysql_result($consulta,0,"archivo_binario"); 

    
// Envio cabeceras al navegador .. se indica que lo "que vá" es una imagen de formato MIME JPEG 
    
Header ("Content-type: image/jpeg"); 

    
// Generar el thumbnail: 

    // Se crea la imagen desde el campo binario de la BD 
    
$img imagecreatefromstring($imagen); 

    
// Tamaño del Thumbanil (de la imagen a generar ..) 
    
$picsize 300
      
    
// Se obtienen los datos del ancho y alto de la imagen. 
    
$new_w imagesx($img); 
    
$new_h imagesy($img); 

    
// Se calcula la relación alto/ancho 
    
$aspect_ratio $new_h $new_w
      
    
// Se ajusta al nuevo tamaño 
    
$new_w $picsize
    
$new_h abs($new_w $aspect_ratio); 

    
// Se crea la mascara de la imagen nueva 
    
$dst_img imagecreate($new_w,$new_h); 

    
// Se copia y reajusta el nuevo tamaño en la nueva imagen. 
    
imagecopyresized($dst_img,$img,0,0,0,0,$new_w,$new_h,imagesx($img),imagesy($img)); 

    
// Se entrega al buffer de salida (navegador en este caso) la imagen en formato JPEG 
    // El tercer parámetro (100) indica la calidad de la imagen: en porcentaje relación calidad/peso imagen. 
    
imagejpeg($dst_img,'',100); 





El problema:

me funciona la insercion, y bajar el archivo cuando se trata de imagenes, pero como hago para bajar cuando el archivo que subi en la BD es un .exe o un .mp3 ?
  #4 (permalink)  
Antiguo 02/04/2008, 15:25
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 18 años, 6 meses
Puntos: 2135
Re: Descargar archivos traidos del codigo binario de la base de datos

Prueba con esto:
Código PHP:
<?php
if(isset($_GET['id'])) { 

    
$conexion=mysql_connect("localhost","root","") or die ("no se ha podido conectar a la BD"); 
    
mysql_select_db("archivos") or die ("no se ha podido seleccionar la BD"); 
    
$sql "SELECT archivo_binario,archivo_tipo,archivo_nombre FROM archivos WHERE id='".$_GET['id']."'"
    
$consulta mysql_query($sql,$conexion); 
    
$datos mysql_fetch_row$consulta );
    
$tipo $datos['archivo_tipo'];
    
$archivo $datos['archivo_binario'];
    
$nombre $datos['archivo_nombre']; 

    
header("Cache-Control: must-revalidate, post-check=0, pre-check=0");
    
header("Cache-Control: private",false);
    
header ("Content-type: $tipo");
    
header("Content-Disposition: attachment; filename=\"$nombre\"\n");
    
header("Content-Transfer-Encoding: binary");
    echo 
$archivo;
}
?>
Saludos.

PD Por favor no crees nuevos temas, continua sobre el tema original, temas unidos.
  #5 (permalink)  
Antiguo 03/04/2008, 06:30
Avatar de farra  
Fecha de Ingreso: marzo-2008
Ubicación: Aqui estoy
Mensajes: 574
Antigüedad: 16 años, 8 meses
Puntos: 20
Re: Descargar archivos traidos del codigo binario de la base de datos

ahora probe ese codigo que escribiste, pero sigue sin funcionar.. osea cuando abro me pregunta: desea abrir o guardar.. si le doy abrir me abre la pagina en blanco y si le doy guardar me guarda un archivo llamado 'ver' de 1kb sin extencion, y si le cambio la extencio a .exe o .mp3 igual no funciona...
  #6 (permalink)  
Antiguo 03/04/2008, 06:56
(Desactivado)
 
Fecha de Ingreso: diciembre-2006
Mensajes: 529
Antigüedad: 17 años, 11 meses
Puntos: 11
Re: Descargar archivos traidos del codigo binario de la base de datos

Si tu objetivo con este script es "proteger" el archivo para que no lo descarguen cuando tu no quieres....
Entonces te coinviene guardarlo en alguna carpeta que no sea accesible via explorador web, una carpeta de base. Entonces en vez de bajarlo de la base de datos, simplemente lo copias y después lo borras ya que son muchos los programas o archivos recargarías la base de datos y sin tener un hosting dedicado puedes tener problemas de rendimiento.

Saludos
  #7 (permalink)  
Antiguo 03/04/2008, 07:28
Avatar de farra  
Fecha de Ingreso: marzo-2008
Ubicación: Aqui estoy
Mensajes: 574
Antigüedad: 16 años, 8 meses
Puntos: 20
Re: Descargar archivos traidos del codigo binario de la base de datos

mi objetivo es aprender...

ya se como guardar en una carpeta no accesible... y la forma como acceder con claves..

ya consegui guardar en una base de datos el codigo binario... ahora quiero saber como traer de nuevo el archivo... ya consegui con imagenes .jpeg .gif .bmp pero no consigo con archivos... .exe .mp3 .loquesea nose si tiene que compilar el codigo o algo asi para mostrarlo...


help!!!!!!
  #8 (permalink)  
Antiguo 03/04/2008, 11:46
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 18 años, 6 meses
Puntos: 2135
Re: Descargar archivos traidos del codigo binario de la base de datos

Prueba así:
Código PHP:
<?php
if(isset($_GET['id'])) { 

    
$conexion=mysql_connect("localhost","root","") or die ("no se ha podido conectar a la BD"); 
    
mysql_select_db("archivos") or die ("no se ha podido seleccionar la BD"); 
    
$sql "SELECT archivo_binario,archivo_tipo,archivo_nombre FROM archivos WHERE id='".$_GET['id']."'"
    
$consulta mysql_query($sql,$conexion) or die( "Error en $sql: " mysql_error() );  
    
$datos mysql_fetch_row$consulta );
    
$tipo $datos['archivo_tipo'];
    
$archivo $datos['archivo_binario'];
    
$nombre $datos['archivo_nombre']; 

    
header("Cache-Control: must-revalidate, post-check=0, pre-check=0");
    
header("Cache-Control: private",false);
    
header ("Content-type: $tipo");
    
header("Content-Disposition: attachment; filename=\"$nombre\"\n");
    
header("Content-Transfer-Encoding: binary");
    echo 
$archivo;
}
?>
Saludos.
  #9 (permalink)  
Antiguo 23/07/2008, 17:09
(Desactivado)
 
Fecha de Ingreso: enero-2008
Ubicación: Mendoza
Mensajes: 458
Antigüedad: 16 años, 9 meses
Puntos: 2
Exclamación Respuesta: Descargar archivos traidos del codigo binario de la base de datos

Ahora como se puede hacer para hacerlo con todas las imagenes o archivos de esa bd... sin pasar el ID, que descargue a una carpeta todos los archivos...

Alguien Sabe como...
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 13:07.