Foros del Web » Programando para Internet » PHP »

Problema con headers y phplot

Estas en el tema de Problema con headers y phplot en el foro de PHP en Foros del Web. Hola, Tengo un problema: Código PHP: Warning :  Cannot modify header information  -  headers already sent by  ( output started at  /var/ www / index . php : 8 )  in  /var/ www ...
  #1 (permalink)  
Antiguo 21/07/2009, 05:35
 
Fecha de Ingreso: agosto-2008
Mensajes: 143
Antigüedad: 15 años, 7 meses
Puntos: 1
Problema con headers y phplot

Hola,

Tengo un problema:

Código PHP:
WarningCannot modify header information headers already sent by (output started at /var/www/index.php:8in /var/www/phplot.php on line 1127 
Lo mismo para la línea 28,29,30 y 36. El código que peta es:

Código PHP:
 if ( (! $this->browser_cache) && (! $this->is_inline)) {
           
header('Expires: Mon, 26 Jul 1997 05:00:00 GMT'); // 1127
            
header('Last-Modified: ' gmdate('D, d M Y H:i:s') . 'GMT'); //1128
            
header('Cache-Control: no-cache, must-revalidate'); // 1129
            
header('Pragma: no-cache'); // 1130
        

y la 1136:

Código PHP:
 if (! $this->is_inline) {
                
Header('Content-type: image/png'); // 1136
            

Estoy usando la librería phplot. Cuando hago el gráfico que lleva de ejemplo, funciona. En cambio, si lo pongo en mi código, no funciona.

Segun he leído, por como está programada la librería primero tengo que hacer el gráfico porque si mando algun carácter, espacio, algun texto, lo que sea, antes de graficar, no funcionará por problemas con los headers.

Entonces, debo primero graficar. El problema está en que aunque haga las consultas a la BD para hacer los gráficos y demás antes de mandar nada al cliente, primero tengo que mandar otras cosas. Es decir, en mi página el gráfica es lo último que se ve. Hay alguna manera de capturar esta imagen del gráfico (así luego cargo la imagen directamente y no hace falta más los headers etc, y podría hacer el gráfico en una página php y que redireccionara a la otra y me cargara la imagen y me ahorraba problemas) o bien de no tener problemas con los headers y graficar cuando me sea necesario en la página?

Cualquier duda o código pedirme, no sé si queda bien explicado.

Muchas gracias,
Samu

EDITO: Si pongo todo el código al principio (el PHP del phplot y demás) sí me va el gráfico pero no me muestra el resto de la página. Cómo podría hacer para mostrar el resto de la página? Y para cargar el gráfico pero no llamar a la función de dibujarla ($plot->DrawGraph(); ) hasta el final de la página? Porque sinó, aunque se muestre la página, el gráfica no queda donde yo quiero :(
  #2 (permalink)  
Antiguo 21/07/2009, 06:22
 
Fecha de Ingreso: julio-2009
Mensajes: 118
Antigüedad: 14 años, 8 meses
Puntos: 2
Respuesta: Problema con headers y phplot

¿Puedes postear el principio del código?
  #3 (permalink)  
Antiguo 21/07/2009, 09:26
 
Fecha de Ingreso: febrero-2006
Mensajes: 134
Antigüedad: 18 años, 1 mes
Puntos: 10
Respuesta: Problema con headers y phplot

Creo que tienes un problema de concepto.

Para que una imagen se muestre en una página web, es decir, para embeber una imagen en HTML (dicho más técnicamente ^^) necesitas una etiqueta <img />.
Es decir, si tenemos una web sencilla como
Código HTML:
<!DOCTYPE html>
<html><head><title>Prueba</title><meta http-equiv="content-type" content="text/html; charset=utf-8" />
</head>
<body>
<h1>Test</h1>

<img src="http://www.forosdelweb.com/f18/problema-con-headers-phplot-720549/imagen.php?datos=..." alt="imagen" />
</body>
</html> 
entonces al cargarse la página (supongamos index.php) lo que hace es que el navegador pida la imagen a imagen.php

Esto es muy bonito, pero demos algunos puntos:
Debido a que la imagen es una imagen, en sí misma, no es posible introducir texto, capas u otros contenidos hipertextuales en ella. Es decir, todo lo que se introduzca en la imagen pasa a ser parte de ella.

Ergo, no puedes utilizar el mismo script php para crear la página HTML y para servir la imagen.

La razón de esto es que son tipos de contenido diferentes. Como tú indicas, hay un problema de cabeceras. Las cabeceras sirven para que el navegador sepa qué tipo de archivo está "bajando".
En una web, éste suele ser "Content-Type: text/html" o bien "Content-Type: application/xml" o similares.
En el caso de una imagen, esta será "Content-Type: image/gif", image/jpeg, image/png o similares, dependiendo también del formato de la imagen.

Sin embargo, sí hay una forma para introducir tu gráfico EN la página (x)HTML.
Y la forma para hacerlo es utilizar el protocolo data:

No funciona en todos los navegadores, pero sí en la mayor parte de ellos.

Quedaría algo como esto:
Código HTML:
<img src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAAAKCAYAAACNMs+9AAAABGdBTUEAALGP
C/xhBQAAAAlwSFlzAAALEwAACxMBAJqcGAAAAAd0SU1FB9YGARc5KB0XV+IA
AAAddEVYdENvbW1lbnQAQ3JlYXRlZCB3aXRoIFRoZSBHSU1Q72QlbgAAAF1J
REFUGNO9zL0NglAAxPEfdLTs4BZM4DIO4C7OwQg2JoQ9LE1exdlYvBBeZ7jq
ch9//q1uH4TLzw4d6+ErXMMcXuHWxId3KOETnnXXV6MJpcq2MLaI97CER3N0
vr4MkhoXe0rZigAAAABJRU5ErkJggg" alt="Punto rojo" /> 
.

para hacer esto una vez tienes la imagen, es decir:

Código PHP:
/* Transformaciones */
// NO hagas echo $imagen, y antes del imagedestroy($imagen)

echo '<img src="data:image/png;base64,' base64_encode($imagen) . '" alt="grafico" />';
imagedestroy($imagen); 
Con PHPlot no estoy seguro de como se accede a la imagen (la misma que con la función $imagen = imagecreate(), por ejemplo).

Espero que mi respuesta te ayude ;)

Un saludo!
__________________
Si te ha gustado lo que he dicho, puedes darme algún punto de reputación, que no te cuesta nada ^_^.

Di no a los juicios de valor!
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:50.