Изображение в реальном времени из rrd-файла в PHP

Я хотел бы генерировать «реальный» образ из rrd-файла в php-скрипте, но не добился успеха. Это скрипт php (/var/www/rrd_image.php), который должен генерировать изображение:

<?php header("Content-type: image/png"); $options = array( "--start", "-1d", "--title=xxx", "--lower-limit=0", "--width=450", "--height=120", "DEF:snr=/var/www/rrd/cm_100.rrd:snr:LAST", "CDEF:tsnr=snr,10,/", "LINE:tsnr#00FF00:US SNR", "GPRINT:tsnr:MIN:Min\: %3.1lf dB", "GPRINT:tsnr:MAX:Max\: %3.1lf dB", "GPRINT:tsnr:LAST:Pill\: %3.1lf dB", ); rrd_graph("-", $options); ?> 

Поэтому я называю это так:

 <img src="rrd_image.php" /> 

Но картина не завершена, в браузере, который я вижу, что это 0 байт, и нет ошибки в журнале Apache. (И когда я запускаю rrd_image.php с консоли, тогда он работает, «изображение» переходит на стандартный вывод.)

Вы делаете это неправильно, потому что rrd_graph() возвращает array не изображение. Вы должны изменить это, чтобы выглядеть так: вот так:

 $fileName = "rrd.png"; rrd_graph($fileName, $options); header("Content-Type: image/png"); header("Content-Length: " . filesize($name)); $fp = fopen($name, 'rb'); if( $fp ) { fpassthru($fp); fclose($fp); } exit(); 

Всегда сначала прочтите документы: http://php.net/manual/en/function.rrd-graph.php

PS: Если вы не знаете, что вам это нужно, никогда не используйте ?> – это избавляет вас от случайного вывода чего-либо обратно в браузер (например, пробелы или LF s после ?> )

Возможность использования '-' в качестве имени файла существует в классе RRDGraph:

 <?php $options = array( "--start", "-1d", "--title=xxx", "--lower-limit=0", "--width=450", "--height=120", "DEF:snr=/var/www/rrd/cm_100.rrd:snr:LAST", "CDEF:tsnr=snr,10,/", "LINE:tsnr#00FF00:US SNR", "GPRINT:tsnr:MIN:Min\: %3.1lf dB", "GPRINT:tsnr:MAX:Max\: %3.1lf dB", "GPRINT:tsnr:LAST:Pill\: %3.1lf dB", ); $graphObj = new RRDGraph('-'); $graphObj->setOptions($options); $res = $graphObj->saveVerbose(); header("Content-type: image/png"); echo $res['image']; 

Источник: http://php.net/manual/en/rrdgraph.saveverbose.php