Ver Mensaje Individual
  #1 (permalink)  
Antiguo 21/04/2009, 08:45
fenixtx
 
Fecha de Ingreso: febrero-2009
Mensajes: 26
Antigüedad: 15 años, 2 meses
Puntos: 0
subiendo documentos a sqlserver con php (en binario)

Saludos a todos...he intentado de todas las formas y lo mas que he llegado es a guardar el archivo...

tengo una consulta...estoy colapsado...sobre el tema


al subir un archivo...se guarda con 0x tal cual el peso lo describe el nombre el formato...todo pero el contenido ..sea una imagen un documendo un pdf lo guarda como 0x te adjunto el codigo

PD: estoy trabajando con sql server.

Código PHP:
<?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 mssql_connect("xcl-it08","sa","") or die("No se pudo realizar la conexion con el servidor.");
mssql_select_db("clientesdb",$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 base64_encode(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 (archivo_binario, archivo_nombre, archivo_peso, archivo_tipo) VALUES ('".$binario_contenido."', '".$binario_nombre."', '".$binario_peso."', '".$binario_tipo."')";
mssql_query($consulta_insertar,$conexion) or die("No se pudo insertar los datos en la base de datos.");
header("location: listar_imagenes.php");  // si ha ido todo bien
exit;
?>
este codigo es el que CLUSTER diseño hace un tiempo..yo solo lo adapte un poco...una observacion les adjunto la tabla que tengo en sql..

Código PHP:
CREATE TABLE [archivos] (
    [
id] [intIDENTITY (11NOT NULL ,
    [
archivo_binario] [imageNULL ,
    [
archivo_nombre] [varchar] (50COLLATE Modern_Spanish_CI_AS NULL ,
    [
archivo_peso] [varchar] (50COLLATE Modern_Spanish_CI_AS NULL ,
    [
archivo_tipo] [varchar] (50COLLATE Modern_Spanish_CI_AS NULL ,
    
CONSTRAINT [PK_archivosPRIMARY KEY  CLUSTERED 
    
(
        [
id]
    )  
ON [PRIMARY
ON [PRIMARYTEXTIMAGE_ON [PRIMARY]
GO 
el tipo imagen segun lo que he leido es el formato blob para guardar documentos en sql...

porfavor si me pueden dar una mano..estare muy agradecido..

Saludos


PD:si saco el base64_encode tira este error...

Cita:
Warning: mssql_query() [function.mssql-query]: message: El identificador que comienza por 'Ñ%Ãn[js‰äá«·¥¿sîHtäÖ²´Nö”èk´J: õ†Ãp9Û5د™Î>û³gÙ _µ$ö4çÄÌrÙå6²»êô«·Q²PŠ®œ`h ÜJ‹-×V‰LC$ÝJ7ŸA/A ™wYöeîKýNy\'×­Fø{×ê3J»‹+ðMl÷' es demasiado largo. La longitud máxima es 128. (severity 15) in C:\Archivos de programa\Apache Software Foundation\Apache2.2\htdocs\agrega\insertar.php on line 27

Última edición por fenixtx; 21/04/2009 a las 08:51