PREMESSA
Nella rete che amministro ho implementato, per il monitoring dei numerosi collegamenti WAN, cacti e l'ho corredato del plugin weathermap: se devo essere onesto, il plugin ha più lo scopo "estetico" che quello funzionale ma comunque è utile per avere grossomodo un'idea di quello che sta accadendo sulla WAN.

Il problema è scappato fuori dopo un aggiornamento involontario (nel centinaio di aggiornamenti dello yum upgrade quello mi è scappato - mai avrei aggiornato cacti da yum visti altri problemi avuti in precedenza!). Immagino, anche se non ne sono matematicamente sicuro, che lo YUM UPGRADE abbia portato la versione di PHP alla 5.1.6 e purtroppo non ricordo quella che c'era prima

A dire il vero dopo l'upgrade TUTTI i plugin sono andati in cavalleria: solo rimettendo i files di una installazione cacti pulita sono riuscito a recuperarli, mantenendo gli RRD.

PROBLEMA
I grafici generati da weathermap non sono visibili nella console di CACTI: in realtà i grafici vengono correttamente generati, ma la loro visualizzazione tramite l'interfaccia WEB porta come risultato un bel quadrato con X rosssa.

ANALISI
Dopo aver spulciato in lungo ed in largo tutti i log ed i filed .php di weathermap, ho tirato fuori l'amato Wireshark per vedere COSA effettivamente il cacti inviava al browser: con una veloce cattura ho scoperto che, in fase di invio del PNG dell'immagine, cacti restituiva, prima del flusso binario del PNG, anche una serie di "numeri". In pratica, il browser non riusciva a visualizzare niente perchè il file PNG che gli arrivava risultava "corrotto" dalla presenza di questi "numeri" messi in "testa" al PNG.

A forza di die; ho isolato il punto del codice dove ci doveva essere qualcosa di sbagliato: nel file weathermap-cacti-plugin.php è infatti presente questa sezione:
             header('Content-type: image/png');
             //readfile_chunked($imagefile);
             readfile($imagefile);

La funzione readfile  è quella che "prende" lo stream contenuto nel file .PNG e lo passa al browser, non prima di aver impostato l'opportuno Content-type. Dalle mie prove è emerso che la funzione readfile  è responsabile dell'aggiunta dei bytes in più: immagino che sia il valore di ritorno dato che il manuale del PHP da come valore di ritorno per readfile un integer. Anche usando la readfile_chunked (funzione definita all'interno dello stesso file weathermap-cacti-plugin.php) si ottiene un analogo risultato.

SOLUZIONE
La soluzione è emersa guardando gli esempi della funzione readfile sulla documentazione del PHP: tutti gli esempi, infatti, riportano l'utilizzo di questa funzione dopo aver chiamato altre due funzioni, rispettivamente ob_clean() e flush(). La prima sembrerebbe pulire l'output buffer mentre la seconda "forza "l'invio al client del buffer.
Ho quindi aggiunto queste due chiamate prima del readfile:
 

            //readfile_chunked($imagefile);
            ob_clean();
            flush();
            readfile($imagefile);

E come per magia tutto ha ripreso a funzionare. Credo che il buon weathermap sia un po' troppo vecchio per le ultime versioni del PHP (speriamo che l'autore rilasci una versione aggiornata!)