Foros del Web » Programando para Internet » PHP »

PHP (Linux/freetds) -> sql server (w2k)

Estas en el tema de PHP (Linux/freetds) -> sql server (w2k) en el foro de PHP en Foros del Web. Hola maestros, debo acceder a una base de datos SQL Server 2000 mediante un programa PHP en una máquina Linux. Para ello el administrador del ...
  #1 (permalink)  
Antiguo 07/02/2006, 05:54
 
Fecha de Ingreso: enero-2002
Mensajes: 91
Antigüedad: 15 años, 11 meses
Puntos: 0
PHP (Linux/freetds) -> sql server (w2k)

Hola maestros,

debo acceder a una base de datos SQL Server 2000 mediante un programa PHP en una máquina Linux. Para ello el administrador del servidor instaló FreeTDS, ODBTP y no sé qué más. Todo va bien pero el problema lo tengo con las imágenes. En una tabla del SQL Server hay un campo "Image" en el cual pongo por ejemplo un jpg. Entonces cuando ataco desde PHP y guardo los datos a disco el archivo final no está bien. En concreto me añade 6 bytes extraños en la cabecera de la imágen y otro más en el pie. Si me cargo esos bytes con un editor de hexadecimal pues... tachán... la imágen se ve perfecta.

La parte de código involucrado es:

... conectar y todo el rollo...

$dataSet = mssql_query("SELECT IdRegistro, CampoImage FROM tabla WHERE CampoImage IS NOT NULL", $conn);

while ($fila=mssql_fetch_row($dataSet)) {
$nombreImagen = $fila[0] . ".jpg"; # más que nada para generar un nombre único para la imagen
$descriptor=fopen($nombreImagen, "wb");
fwrite($descriptor, $fila[1]);
fclose($descriptor);
}


Pues eso... las imágenes que previsamente he incrustado en la BBDD son jpg y si luego las comparo con las imágenes que me baja el programa pues eso, tienen 6 bytes extras en la cabecera y un byte extra en el pie.

En fin, cuando he hecho lo mismo en otros entornos (MySQL por ejemplo) el código anterior funciona perfectamente.

Si alguien ha trabajado con FreeTDS o similar para acceder a SQL Server desde Linux tal vez me pueda echar una mano.

Gracias

HS
  #2 (permalink)  
Antiguo 07/02/2006, 07:25
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 15 años, 11 meses
Puntos: 126
En lugar de generar un archivo (que debería funcionar) has probado a entregar directamente la imagen obtenida (prueba con una sólo) al navegador para verla?

Me refiero a:

Código PHP:
<?
// tu cógido de la consulta ...

// Componer las cabeceras HTTP .. por supuesto antes de estas cabeceras
// No puede existir nada de salida antes al navegador ...
header("Content-type: image/pjpeg"); // o formato MIME de tus JPG .. algunos son jpeg .. otros pjpeg .. etc .. revisalo.

// enviar los datos binarios al buffer de salida de PHP.
echo $fila[1];
?>
Un saludo,
  #3 (permalink)  
Antiguo 07/02/2006, 08:02
 
Fecha de Ingreso: enero-2002
Mensajes: 91
Antigüedad: 15 años, 11 meses
Puntos: 0
Hola Cluster,

bueno, lo probaré más que nada para ver si así se ve bien la imagen pero en todo caso necesito generar el archivo igualmente.

Por cierto, he probado a atacar el sql server con php pero esta vez desde mi pc que tiene windows y tengo el mismo problema de antes. Qué curioso...

Gracias

HS
  #4 (permalink)  
Antiguo 07/02/2006, 08:21
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 15 años, 11 meses
Puntos: 126
Realmente por mi parte no he trabajado con SQL Server y archivos "binarios" .. no sé si tendrás que aplicar (tal vez?) algún proceso de "escapado" con stripslashes() o addslashes() , pero podría ser ese el problema. Pruebalo.

http://www.php.net/manual/en/function.stripslashes.php

(esto es por el tratamiento de magic_quote_runtime que afecta a los datos que se extraen a PHP desde BBDD o lectura de archivos).

http://www.php.net/manual/en/ref.inf...quotes-runtime

Un saludo,
  #5 (permalink)  
Antiguo 08/02/2006, 03:32
 
Fecha de Ingreso: enero-2002
Mensajes: 91
Antigüedad: 15 años, 11 meses
Puntos: 0
Pues magic_quotes_runtime y magic_quotes_sybase lo tengo a off y ya he usado stripslashes() addslashes() y un montón de cosas más y la cosa no se arregla.

Y da igual si la imagen la grabo a disco o la envio al navegador con Header(). Siempre viene con esos bytes de más.

Ya estoy desesperao.

Gracias

HS
  #6 (permalink)  
Antiguo 08/02/2006, 06:17
 
Fecha de Ingreso: enero-2002
Mensajes: 91
Antigüedad: 15 años, 11 meses
Puntos: 0
Al final lo solucioné eliminando manualmente los bytes sobrantes. El problema es el front-end que usamos para acceder a sql server, un programa llamado axapta de microsoft. El cabrón te añade los bytes por cortesía de la casa.

En fin, sin comentarios... Gracias Cluster
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 01:24.