Foros del Web » Programando para Internet » PHP »

Preguntas o Problemas ....

Estas en el tema de Preguntas o Problemas .... en el foro de PHP en Foros del Web. Bueno estoy tratando de insertar una imagen en mi base de datos MSSQL Server Buscando informacion encontre que a partir de PHP4.3 implementaron file_get_contents -- ...
  #1 (permalink)  
Antiguo 03/10/2003, 08:53
Avatar de Chuty  
Fecha de Ingreso: noviembre-2002
Ubicación: el bar de la esquina
Mensajes: 609
Antigüedad: 21 años, 4 meses
Puntos: 2
Preguntas o Problemas ....

Bueno estoy tratando de insertar una imagen en mi base de datos MSSQL Server
Buscando informacion encontre que a partir de PHP4.3 implementaron
file_get_contents -- Reads entire file into a string
Description
string file_get_contents ( string filename [, int use_include_path [, resource context]])
Identical to file(), except that file_get_contents() returns the file in a string.
file_get_contents() is the preferred way to read the contents of a file into a string. It will use memory mapping techniques if supported by your OS to enhance performance.

Nota: Esta función es segura binariamente.

Por un lado hice este ejemplo on la funcion
Código PHP:
<?

 $datastring 
file_get_contents("firma.png");
 
$data unpack("H*hex"$datastring);
// Ver funcion

  
$conex odbc_connect("MISERVER""sa""sa");
  
$consulta = ("INSERT dbo.tmp_image(IMAGEN, NOMBRE, LONG) values (0x".$data['hex'].",'img.jpg', '233')");

  
$resultado odbc_exec($conex$consulta);
  
odbc_free_result($resultado);
  
odbc_close($conex);
?>
unpack
(PHP 3, PHP 4 )

unpack -- desempaqueta datos de una cadena binaria
Descripción
array unpack ( string format, string data)

Desempaqueta datos de una cadena binaria en un array, de acuerdo al formato format. Devuelve un array que contiene los elementos de la cadena binaria desempaquetados.

Unpack funciona de manera ligeramente diferente a Perl, ya que los datos desempaquetados se almacenan en un array asociativo. Para conseguir ésto debe nombrar los diferentes códigos de formato y separarlos por una barra inclinada /. Ejemplo 1. cadena de formato unpack

$array = unpack("c2chars/nint", $binarydata);

Por otro lado con la version de PHP 4.2 usaba este otro ejemplo y me daba el mismo resultado.

Código PHP:
<?
$filename 
firma.png;
$fd fopen("$filename ""rb");
$content fread($fdfilesize($filename));
fclose($fd);

  
$conex odbc_connect("MISERVER""sa""sa");

  
$consulta = ("INSERT dbo.tmp_image(NOMBRE, LONG, IMAGEN) values ('img.jpg','AAAA', $content )");
                    
  
$resultado odbc_exec($conex$consulta);
  
odbc_free_result($resultado);
  
odbc_close($conex);
?>
Mi pregunta es en el primer ejemplo tengo que desempaquetar los datos de la cadena binaria con la funcion unpack para insertar?? o deveria empaquetar los datos con la funcion pack ya que el resultado del primer ejemplo y el segundo me da el mismo resultado.
Alguien me puede dar una mano o decirme en que me estoy equivocando.
desde ya muchas gracias y saludos a todos
  #2 (permalink)  
Antiguo 03/10/2003, 09:32
Avatar de nuevo  
Fecha de Ingreso: mayo-2003
Ubicación: Spain
Mensajes: 2.009
Antigüedad: 20 años, 10 meses
Puntos: 2
aqui tienes un post ya bastante completo de lo que puede ser un upload de forma binaria...

http://www.forosdelweb.com/showthrea...hlight=binario
__________________
3w.valenciadjs.com
3w.laislatv.com
  #3 (permalink)  
Antiguo 04/10/2003, 01:15
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 2 meses
Puntos: 129
Supongo que lo habrás leido ya .. pero .. te hago un extracto del código que necesitas ..
(supongo que M$ SQL Server trabajará los BLOD igual? ..)

Código PHP:
// 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))); 
como mucho puedes tener problemas con los "addslashes()" .. es una de las cosas que algunas BD los introducen ellas .. o hay que hacerlo a mano ...

Un salduo,
__________________
Por motivos personales ya no puedo estar con Uds. Fue grato haber compartido todos estos años. Igualmente los seguiré leyendo.

Última edición por Cluster; 04/10/2003 a las 01:17
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 19:14.