繁体   English   中英

来自PHP中的rrd文件的实时图像

[英]Realtime image from rrd file in PHP

我想从PHP脚本中的rrd文件生成“实时”图像,但没有成功。 这是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之后的?>

在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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM