Foros del Web » Programando para Internet » PHP »

subiendo documentos a sqlserver con php (en binario)

Estas en el tema de subiendo documentos a sqlserver con php (en binario) en el foro de PHP en Foros del Web. 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 ...
  #1 (permalink)  
Antiguo 21/04/2009, 08:45
 
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
  #2 (permalink)  
Antiguo 21/04/2009, 09:04
 
Fecha de Ingreso: febrero-2009
Mensajes: 26
Antigüedad: 15 años, 2 meses
Puntos: 0
Respuesta: subiendo documentos a sqlserver con php (en binario)

un nuevo descubrimiento, trate de guardar un documento xml y lo guardo sin ningun problema....pero deverdad que no se por que no se puede guardar ni una imagen ni, documento alguno..
porfavor si alguien sabe por que...ayudeme 8D
  #3 (permalink)  
Antiguo 21/04/2009, 09:20
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 17 años, 10 meses
Puntos: 2135
Respuesta: subiendo documentos a sqlserver con php (en binario)

¿Si no sacas el base64encode que error te da?

Saludos.
  #4 (permalink)  
Antiguo 21/04/2009, 09:31
 
Fecha de Ingreso: febrero-2009
Mensajes: 26
Antigüedad: 15 años, 2 meses
Puntos: 0
guarda, el nombre, el tamaño,y el tipo..pero en el contenido deja 0x tal cual..

no!, disculpa..es k se direccionaba altiro ...a otra pagina y no veia el error...es este

Cita:
Warning: Wrong parameter count for fread() in C:\Archivos de programa\Apache Software Foundation\Apache2.2\htdocs\agrega\insertar.php on line 18
y este
Cita:
Warning: Wrong parameter count for addslashes() in C:\Archivos de programa\Apache Software Foundation\Apache2.2\htdocs\agrega\insertar.php on line 18
le hice un var_dump y claro el striing era vacio....

porfavor si entiendes el problemasme ayudarias bastante

otro dato mas...el string arrojado sin hacer ninguna modificacion es:
Cita:
string 'ÐÏࡱá\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0>\0\0þÿ \0\0\0\0\0\0\0\0\0\0\0\0\0\0\0.\0\0\0\0\0\0\0\0 \0\00\0\0\0\0\0\0þÿÿÿ\0\0\0\0-\0\0\0ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ'... (length=45592)

y el error es:
Cita:
Warning: mssql_query() [function.mssql-query]: message: Línea 11: sintaxis incorrecta cerca de '¬'. (severity 15) in C:\Archivos de programa\Apache Software Foundation\Apache2.2\htdocs\agrega\insertar.php on line 27
tambien de este tipo
Cita:
Warning: mssql_query() [function.mssql-query]: message: El identificador que comienza por 'ج¶Géâ\\Ä!ý-ÛRk.“sþÔ»�..—·´aæ¿*?\0\0ÿÿ\0PK\0\0\0\0\0!\ 0¥Ö§çÀ\0\0\06\0\0 \0\0\0_rels/.rels„�ÏjÃ0 ‡ï…½ƒÑ}QÒÃ%v/¥�C/£}\' 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

eso mas que nada...8D

Última edición por GatorV; 21/04/2009 a las 10:27
  #5 (permalink)  
Antiguo 21/04/2009, 10:29
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 17 años, 10 meses
Puntos: 2135
Respuesta: subiendo documentos a sqlserver con php (en binario)

Cambia tu tipo de campo de Image a Memo, para que lo insertes con base64encode() ya que este te da una cadena, y a la hora de mostrar haces el base64decode().

Por otro lado te recomiendo usar file_get_contents() en lugar de fread(), fopen() es más directo y queda más limpio:

Código php:
Ver original
  1. $binario_contenido = base64_encode(file_get_contents($binario_nombre_temporal));

Saludos.
  #6 (permalink)  
Antiguo 21/04/2009, 10:51
 
Fecha de Ingreso: febrero-2009
Mensajes: 26
Antigüedad: 15 años, 2 meses
Puntos: 0
idolo....jajaja..muchas gracias compadre..el ultimo detalle que me falta es poder guardar los documentos...y el error que me tiro ahora es k el tipo image no es compatible con el tipo texto..voy a provar...ntexto o algo por el estilo..

saludos y muchas gracias te cuento como me fue...

espero que este post le sirva a mucha gente por que he visto varis inconclusos..


Ya. estimado..lo cambie por ntext..

y me tiro este string...espero que los datos hayan quedado integros 8D.....voy a ver que tal estan ahora...
Cita:
0M8R4KGxGuEAAAAAAAAAAAAAAAAAAAAAPgADAP7/CQAGAAAAAAAAAAAAAAABAAAALgAAAAAAAAAAEAAAMAAAAAEAAA D+////AAAAAC0AAAD/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

ese es un word ejemplo que dice hola adentro 8D...

otra pregunta...no existe algun tutorial de como descargar estos archivos?'...o algun comando..

gracias por todo... y saludos..me alegraste el dia..

estimado, voy a molestar un poco mas...el problema es que quiero bajar el archivo para verificar que este correctamente bien subido...pero cuando uso el archivo ver.php que te muestro a continuacion empesaron a salir los problemas con la compatibilidad. de las variables y las funciones que estaba usando....mira este es el codigo de ver:

Cita:
<?php
//if(isset($_GET['id'])) {

// you may have to modify login information for your database server:
$conexion=mssql_connect("xcl-it08","sa","") or die ("no se ha podido conectar a la BD");

mssql_select_db("clientesdb") or die ("no se ha podido seleccionar la BD");

$sql = "SELECT * FROM archivos WHERE id=26";

$consulta = mssql_query($sql,$conexion);

$datos = mssql_result($consulta,0,"archivo_binario");
$tipo = mssql_result($consulta,0,"archivo_tipo");
$nombre = mssql_result($consulta,0,"archivo_nombre");
$peso = mssql_result($consulta,0,"archivo_peso");

var_dump($datos);
header("Content-type: $tipo");
header("Content-length: $peso");
header("Content-Disposition: inline; filename=$nombre");
echo $datos;


//}
?>
el id 26 existe y es uno de los archivos que estaba subido gracias a tus datos 8D...

aca hay algunos errores repetitivos:
Cita:
Warning: mssql_query() [function.mssql-query]: message: No se puede enviar datos de Unicode de intercalación exclusiva de Unicode o datos ntext mediante DB-Library (como ISQL) o la versión ODBC 3.7 o anterior. (severity 16) in C:\Archivos de programa\Apache Software Foundation\Apache2.2\htdocs\agrega\ver.php on line 11
y este aun que claro la clave del problema esta en el primero...
Cita:
Warning: mssql_query() [function.mssql-query]: message: No se puede enviar datos de Unicode de intercalación exclusiva de Unicode o datos ntext mediante DB-Library (como ISQL) o la versión ODBC 3.7 o anterior. (severity 16) in C:\Archivos de programa\Apache Software Foundation\Apache2.2\htdocs\agrega\ver.php on line 11
saludos y espero que te quede algo de respuesta para mi jeje..

muchas gracias..

Última edición por GatorV; 21/04/2009 a las 13:37
  #7 (permalink)  
Antiguo 21/04/2009, 13:36
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 17 años, 10 meses
Puntos: 2135
Respuesta: subiendo documentos a sqlserver con php (en binario)

Es el proceso inverso, lo que haces es leer el contenido y mostrarlo en el navegador para que se descargue, ve este post:

http://www.forosdelweb.com/f18/venta...rchivo-690822/

Por otro lado revisa este post:
http://www.forosdelweb.com/f18/error...ar-sql-178794/

Saludos.
  #8 (permalink)  
Antiguo 21/04/2009, 14:13
 
Fecha de Ingreso: febrero-2009
Mensajes: 26
Antigüedad: 15 años, 2 meses
Puntos: 0
Respuesta: subiendo documentos a sqlserver con php (en binario)

no entiendo, es que los errores que me daba no tiene k ver con la respuesta que me pusiste, disculpa...

lei lo que me pusiste pero no encuentro la relacion :(...
el errore que me da es:
Cita:
message: No se puede enviar datos de Unicode de intercalación exclusiva de Unicode o datos ntext mediante DB-Library (como ISQL) o la versión ODBC 3.7 o anterior.
y el codigo es este:

Cita:
<?php
//if(isset($_GET['id'])) {

// you may have to modify login information for your database server:
$conexion=mssql_connect("xcl-it08","sa","") or die ("no se ha podido conectar a la BD");

mssql_select_db("clientesdb") or die ("no se ha podido seleccionar la BD");

$sql = "SELECT * FROM archivos WHERE id=2";

$consulta = mssql_query($sql,$conexion);

$datos = mssql_result($consulta,0,"archivo_binario");
$tipo = mssql_result($consulta,0,"archivo_tipo");
$nombre = mssql_result($consulta,0,"archivo_nombre");
$peso = mssql_result($consulta,0,"archivo_peso");

header("Content-type: $tipo");
header("Content-length: $peso");
header("Content-Disposition: attachment; filename=$nombre");
echo base64_decode($datos);


//}
?>
ahora de verda que no se que cambiar para que resulte la descarga...son tan pocas lineas que no se k hago mal...T_T

muchas gracias por toda tu ayuda igual...
  #9 (permalink)  
Antiguo 21/04/2009, 14:24
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 17 años, 10 meses
Puntos: 2135
Respuesta: subiendo documentos a sqlserver con php (en binario)

En el segundo link te dice la solución al parecer por las versiones de la librería el que uses SELECT * FROM foo causa error y debes de usar SELECT foo, bar FROM foo, es decir poner las columnas que deben de ser.

Saludos.
  #10 (permalink)  
Antiguo 21/04/2009, 14:45
 
Fecha de Ingreso: febrero-2009
Mensajes: 26
Antigüedad: 15 años, 2 meses
Puntos: 0
wa...si lo hice uno por uno.y igual el mismo error...al final como dicen que el ntext no es compatible??o.O...wa.con la version de libreria que tengo...

siento que entiendo mas pero estoy en el mismo oyo xD..jejeje

muchas gracias gatorV

estimados, estoy provando subir una imagen ..pero cuando pongo ejecuto el archivo ver.php lo unico que me sale es el archivo en binario..por que pasa eso??...saludos

Última edición por GatorV; 21/04/2009 a las 18:00
  #11 (permalink)  
Antiguo 21/04/2009, 18:02
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 17 años, 10 meses
Puntos: 2135
Respuesta: subiendo documentos a sqlserver con php (en binario)

Mmm si es ntext no es compatible vas a tener que cambiar de tipo de campo, o te recomiendo usar PDO.

Saludos.
  #12 (permalink)  
Antiguo 21/04/2009, 22:12
 
Fecha de Ingreso: febrero-2009
Mensajes: 26
Antigüedad: 15 años, 2 meses
Puntos: 0
Respuesta: subiendo documentos a sqlserver con php (en binario)

vale, muchas gracias gator te agradesco un monton...por problemas de tiempo no voy a poder seguir investigando por que tengo k entregar el tema manaña...finalmente mientras tanto voy a dejar un link con el nombre del archivo guardado en la bd...y el archivo en una direccion....maldito sql k no amabilisa con la gente :)....


Saludos.,..

Porsicaso no voy a dejar el tema botado...voy a seguir investigando para poder sacar el tema con sql...
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 11:33.