Я хотел бы генерировать «реальный» образ из 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'];