Newsgroup: it.comp.www.php
Titolo: non refresh di immagini

creo un imagine che rappresenta un semplice istogramma (1 - 12) , salvo
l'immagine su HD (13), e poi carico l'immagine in una tabella (14);
quando richiamo la stessa pagina con parametri diversi (e quindi immagine
diversa) ho che in tabella viene caricata l'immagine con i dati precedenti;
per avere l'immagine corretta devo cliccare sul pulsante aggiorna del
browser!!!
Come mai, dato che l'immagine viene generata prima di caricarla in
tabella, non viene visualizzata, ma viene tenuta quella vecchia??
penso sia un problema di memoria cache del browser, come posso correggere
il problema?
..Penso sia un problema comune a tanti di voi
questo è il listato:
1 - $larghImm=1000; 
2 - $image=ImageCreate($larghImm, 60);
 
3 - $white=ImageColorAllocate($image, 255, 255, 255);
4 - $blue=ImageColorAllocate($image, 0, 0, 255);
5 - $red=ImageColorAllocate($image, 255, 0, 0);
6 - $black=ImageColorAllocate($image, 0, 0, 0);
7 - $xM=$larghImm*$M_Arr[$k]/$maxTot; 
8 - Imagefilledrectangle($image,0,0,$xM,19,$blue);
9 - $xF=$larghImm*$F_Arr[$k]/$maxTot;			
10 - Imagefilledrectangle($image,0,20,$xF,39,$red);
11 - $xT=$larghImm*$T_Arr[$k]/$maxTot;
12 - Imagefilledrectangle($image,0,40,$xT,59,$black);
13 - ImagePNG($image,"imgG/$A_Arr[$k].png");
14 - echo "<TD><img src=imgG/$A_Arr[$k].png></TD></TR>
ciao e grazie
alessandro
-- 
questo articolo e` stato inviato via web dal servizio gratuito 
http://www.newsland.it/news
 segnala gli abusi ad 
ab...@newsland.it

 
č un problema di cache ma č un problema pure logico se due utenti vedono
la stessa pagina rischi che abbiano dati inconsistenti.
Non salvare la pagina su file ma servila direttamente.
fai uno script che genera un immagine al volo e la serve al browser.
esempio:
<?php
$my_img = imagecreate( 200, 80 );
$background = imagecolorallocate( $my_img, 0, 0, 255 );
$text_colour = imagecolorallocate( $my_img, 255, 255, 0 );
$line_colour = imagecolorallocate( $my_img, 128, 255, 0 );
imagestring( $my_img, 4, 30, 25, "
michel...@gmail.com
",
  $text_colour );
imagesetthickness ( $my_img, 5 );
imageline( $my_img, 30, 45, 165, 45, $line_colour );
header( "Content-type: image/png" );
imagepng( $my_img );
imagecolordeallocate( $line_color );
imagecolordeallocate( $text_color );
imagecolordeallocate( $background );
imagedestroy( $my_img );
?>
e poi dalla pagina html la richiami:
<img src="myimpage.php" width="200" height="80">
cosě separi anche la logica dalla presentazione che non fa mai male.
se gli devi passare dei parametri:
<img src="myimpage.php?mio_parametro1=valore&mio_parametro2=valore"
width="200" height="80">
ciao


La cache non va combattuta - è un alleato, non un nemico! :)
Per prima cosa direi che è abbastanza improbabile che tu abbia
veramente bisogno di generare un grafico per *ogni* richiesta. Io mi
muoverei su due soluzioni possibili: 1- se l'immagine va generata ogni
quantità di tempo predefinita, prendere l'immagine attraverso un file
php che imposta gli header http in modo che scadano per il tempo
prestabilito. 2- se non sai entro quando i dati saranno "vecchi" e
vuoi la massima responsività (si dice in italiano?) passi sempre
attraverso un file .php, che chiamerai sempre con un parametro in get
diverso (trucchetto per non far cachare il risultato da browser o
proxy) che controlla i dati e vede se prendere i dati direttamente dal
disco o ha bisogno di generarli prima.
Per quanto riguarda la consistenza del file di immagine durante la
generazione, io opterei per un semplice lock su filesystem.
Ciao!

ora provo;
comunque per chiarezza, la pagina php che presenta l'immagine ha come
parametro l'ID del comune ed al volo si crea l'immagine-grafico del numero
totale degli abitanti (tot., m. e f.) per anno;
per cui per ogni comune ho un grafico diverso (in Sardegna ci sono 377
comuni), quindi se io vedo i dati del comune di Sassari mi da un immagine,
se poi passo al comune di Alghero mi cambia i numeri in tabella mettendo
quelli giusti, ma mi presenta la stessa immagine fino a che non clicco su
aggiorna;
ora provo a fare come ha scritto Michelangelo, grazie ad entrambi


 ciao
scusa ma non funziona, viene visualizzata la pagina htm senza immagine,
devo aver sbagliato qualche cosa
ho creato i 2 file 
immagine.php:
<?php
$my_img = imagecreate( 200, 80 );
$background = imagecolorallocate( $my_img, 0, 0, 255 );
$text_colour = imagecolorallocate( $my_img, 255, 255, 0 );
$line_colour = imagecolorallocate( $my_img, 128, 255, 0 );
imagestring( $my_img, 4, 30, 25, "
michel...@gmail.com
",$text_colour );
imagesetthickness ( $my_img, 5 );
imageline( $my_img, 30, 45, 165, 45, $line_colour );
header( "Content-type: image/png" );
imagepng( $my_img );
imagecolordeallocate( $line_color );
imagecolordeallocate( $text_color );
imagecolordeallocate( $background );
imagedestroy( $my_img );
?>
immagine.htm:
<html>
<HEAD></HEAD>
<BODY>
<img src="immagine.php" width="200" height="80">
</BODY>
</html>
ciao


 totale degli abitanti (tot., m. e f.) per anno;
Allora la soluzione è semplice: scrivile una volta e poi restituisci
solo il file :| A che serve generarle ogni volta?

 solo il file :| A che serve generarle ogni volta?
ho 377 comuni per 8 anni e quindi dovrei tenere 377*8=3016 immagini (1 per
ogni anno, non posso creare una immagine unica dato che vanno inserite in
una tabella dove ho i dati annuali); se poi inserisco i dati del 2009 mi
toccherebbe crearmi le 377 immagini del 2009 e cosě via per gli anni
successivi...
per cui, secondo me, č meglio generare al volo soltanto le 8 (1 per ogni
anno) immagini del comune in questione
ciao e grazie


 anno) immagini del comune in questione
le generi UNA sola volta con uno script e poi le richiami.. visto che 
sono dati consolidati (almeno quelli del passato) č decisamente piů 
efficiente gernerarle in blocco una volta sola.
my 2c
Stefano


Se le cifre sono quelle che dici a farle tutte sarai ad occhio e croce
sotto il Gb di spazio su disco - che personalmente mi sembra
accettabile.
In caso non lo fosse, sempre personalmente, chiederei 50euro di disco
invece di perdere tempo a scrivere codice.
In caso proprio lo dovessi scrivere per qualche motivo misterioso,
terrei una soglia di occupazione su disco, memorizzando solo le più/
ultime richieste e sostituendole alle più vecchie/meno richieste.
E poi che dire, se proprio vuoi far morire gonfio il server e far
aspettare di più l'utente sei liberissimo di farlo! ;)
Ciao!