A ver si alguien me puede orientar.
Tengo un viejo sistema que genera campos tipo blob.
Resulta que el mismo programa me muestra las imágenes sin problemas en un servidor linux, pero no lo hace en mi local (W10). Las imágenes se levantan de la misma tabla.
Parece ser que el archivo temporal no está bien generado, pero no se por qué.
Hola Claudio,
un poco mas de info como para poder ayudarte?.. si intentas acceder a las propiedades del archivo directamente con el explorer, te dice algo?.. intetaste abrirlos con un editor de texto por si acaso hay algo que haya roto el formato?.
Si son archivos binarios (imagenes) no deberia haber diferencias entre Linux y Windows, lo que no quita que PHP recupere mal el blob desde postgres,
Probaste con algun cruzamiento?.. digamos Postgresql en W10 y PHP en linux, o viceversa?
A ver:
Los datos bytea están en un servidor Linux.
Arranco el proyecto en mi local, como puede ser desde el Toba Editor, y al intentar acceder a la imagen genero un archivo en la carpeta Temp del proyecto.
Ese archivo no puedo abrirlo con el explorador, me muestra un montón de caracteres en lugar de la imagen.
Si paso este archivo al linux, hace exactamente lo mismo.
En cambio, si tomo un archivo (de los temporales) creado en el entorno linux por el mismo programa y lo paso a la pc windows, se ve perfectamente.
Es como si al generar el archivito Temp, desde el entorno windows, no lo hiciera bien, generando un archivo corrupto.
Hola Claudio,
con que metodo estas generando el archivo temporal?. No hay muchas cosas que puedan cambiar entre windows y linux para que se rompa asi un binario.
Saludos
Esta es la porción de código que funciona el Linux pero fallutea en window. Antes, hace tiempo, funcionaba en ambos.
$fp_imagen = $this->dep('bienes')->get_blob('b01foto');
if (isset($fp_imagen)){
#-- Se necesita el path fisico y la url de una archivo temporal que va a contener la imagen
$temp_nombre = md5(uniqid(time()));
$temp_archivo = toba::proyecto()->get_www_temp($temp_nombre);
#-- Se pasa el contenido al archivo temporal
$temp_fp = fopen($temp_archivo['path'], 'w');
stream_copy_to_stream($fp_imagen, $temp_fp);
fclose($temp_fp);
$tamano = round(filesize($temp_archivo['path']) / 1024);
#-- Se muestra la imagen temporal
$form->ef('imagen')->set_estado("<img src='{$temp_archivo['url']}' >");
$form->ef('b01foto')->set_estado('Tamaño: '.$tamano. ' KB');
}
te hago una consulta, el stream_copy_to_stream te devuelve la cantidad de bytes correcta?, digamos… se alcanza a copiar todo?. Otra posibilidad es que termine en un error (por el motivo que fuere).
Otra opción es que por defecto en windows se este abriendo el archivo en modo texto, con lo cual intenta traducir automaticamente algunas cuestiones. Probaría lo siguiente: