2011-04-02 65 views
12

cuando ejecuto el código a continuación, muestra una imagen que se almacena en un archivo mysql Db como una variable blob. El problema es si hago eco de cualquier otra cosa, incluso algo tan simple como echo '--------'; antes de llamar a la imagen, la imagen no se mostrará. solo muestran caracteres aleatorios. si hago eco de algo después de la imagen que muestra la imagen pero nada lo hace después. ¿Puede alguien decirme por qué es y cómo me puede ir sobre la visualización de otros artículos y la imagen juntos, graciasmostrando una imagen almacenada en un blob mysql

<?php 

include("inc/library.php"); 

connectToDatabase(); 

$sql = "SELECT * FROM theBlogs WHERE ID = 1;"; 

$result = mysql_query($sql) or die(mysql_error()); 
$row = mysql_fetch_array($result); 

header("Content-type: image/jpeg"); 
echo $row['imageContent']; 
$db->close(); 

?> 
+0

Gracias su pregunta me ayudó.Mi imagen no se mostraba después de usar el encabezado, ahora lo sé porque estaba haciendo eco de otro texto :) – Faizan

Respuesta

26

Puede convertir los datos de imagen en base 64 y pegarlo en una etiqueta <img>. Actualmente, intenta escribir texto fuera de los datos de imagen, y el navegador de internet piensa que su texto es parte de la imagen y arroja un error.

intentar algo como esto:

echo '<img src="data:image/jpeg;base64,' . base64_encode($row['imageContent']) . '" />'; 
echo 'Hello world.'; 

Nota, esto no es la mejor solución, ya que no puede ser almacenado en caché y es bastante lento, especialmente en los teléfonos móviles. Consulte el caniuse for data URIs.

+3

URI de datos don t ¡funcionan en todos los navegadores! –

9

Bien ... la respuesta a por qué hará lo que usted describió es debido a su uso de la función de encabezado(). En PHP, no puede imprimir nada antes de una llamada de encabezado ya que esto dirige al servidor web a preparar un encabezado de contenido. Por lo general, aquellos reemplazan completamente todo el contenido.

En segundo lugar, me gustaría mencionar que el almacenamiento de imágenes en una base de datos suele ser una mala idea por dos motivos.

  1. Tiene un impacto significativo en el rendimiento y el rendimiento.
  2. Debe escribir código para representar los datos de blobs en lugar de solo mostrar la imagen.

El método preferido para la presentación de imágenes basada en bases de datos sería que usted tendría las imágenes almacenadas en un directorio y sus nombres de archivo almacenados en la base de datos. Ahora, cuando desee visualizar las imágenes, simplemente necesita sondear la base de datos para saber qué nombres de archivo desea visualizar y luego simplemente incluir el nombre de archivo en un atributo HTML.

La ejecución es mucho más rápida también.

Además, me gustaría señalar que si desea que un script realmente haga su renderizado, querría que ese script defina su encabezado y luego eco o impresión del blob de la imagen después de definir el encabezado.

Tenga en cuenta que cuando crea su etiqueta html ... eso en el atributo src, entonces lo haría algo así como esto;

<img src="image.php?id=<some_number>"> 

Ahora, su archivo image.php escupirá los datos de la imagen en la etiqueta.

+0

+1 Solución mucho más rápida y limpia. –

+0

"Tiene un impacto significativo en el rendimiento" dar referencia. –

3

Solo una idea, tal vez pueda separar la lógica para mostrar la imagen del contenido. Lo que quiero decir es que puedes crear un archivo como pic.php que acepte el id/nombre de archivo (no estoy seguro si usas nombres de archivo o identificadores para referirte a la imagen) y luego muestra la imagen. Entonces podría simplemente refrence imagenes en su HTML haciendo por ejemplo algo como esto:

<p>my content</p> 
<img src="pic.php?picid=1" /> 
<p>my Other Content</p> 
Cuestiones relacionadas