我有这个脚本把图像输出到命令行,如果我把它重定向到一个文件.pNG,我可以正确地看到图表,但是如果我试着从浏览器中做同样的事情,我就看不到它。我也试着把剧本分成两部分,但没用。1->生成图形2->从这个脚本调用第一个脚本,并将所有脚本保存在一个变量中。剧本:<?phpheader("Content-Type: image/png");header("Content-Transfer-Encoding: binary");ob_flush();require_once ('/opt/rMON/config.php');//if(isset($_GET['id'])){// $id = trim($_GET['id']);//} else {// die("El id?");//}//DEBUG ID$id=1;$result = ***MYSQL QUERY***$ip = long2ip($result['ip']);$interface = $result['interface'];$counter = $result['counter'];$unix_name = $result['unix_name'];$community = $result['community'];$version = $result['version'];$port = $result['port'];$rrd_file = __RRD_ROOT__.$unix_name.".rrd";$graph_name = $result['name'];$host_ip = long2ip($result['ip']);$iface_name = $result['iface_name'];$fecha = date("y-m-d h:i:s");$start = "3600";$tiempo = "1 Hora";create_graph($start, $graph_name, $fecha, $rrd_file, $input, $output, $host_ip, $iface_name, $tiempo);function create_graph($start, $graph_name, $fecha, $rrd_file, $input, $output, $host_ip, $iface_name, $tiempo){ $opts = array ( "--imgformat=PNG", "--slope-mode", "--title=$graph_name ($host_ip) - $iface_name - $tiempo", "--rigid", "--base=1000", "--height=120", "--width=500", "--alt-autoscale-max", "--lower-limit=0", "--font=TITLE:10:", "--font=AXIS:8:", "--font=LEGEND:8:", "--font=UNIT:8:30:", "--watermark=$fecha - Radu Radu", "--start=-$start", "--end=now", "DEF:a=$rrd_file:$input:AVERAGE", "DEF:b=$rrd_file:$output:AVERAGE", "CDEF:cdefa=a,8,*", "CDEF:cdefe=b,8,*", "AREA:cdefa#00CF00FF:Entrante\t", "GPRINT:cdefa:LAST:Actual\:%8.2lf %s", "GPRINT:cdefa:AVERAGE:Promedio\:%8.2lf %s", "GPRINT:cdefa:MAX:Máximo\:%8.2lf %s", "LINE1:cdefe#002A97FF:Saliente\t", "GPRINT:cdefe:LAST:Actual\:%8.2lf %s", "GPRINT:cdefe:AVERAGE:Promedio\:%8.2lf %s", "GPRINT:cdefe:MAX:Máximo\:%8.2lf %s" ); $ret = rrd_graph("-", $opts); if(!$ret){ echo "ERROR en el objeto: $graph_name ".rrd_error()."\n"; }}?>我也试图输出到php://output,但没有成功。正如我在日志中看到的,输出将转到apache服务器日志。谢谢!! (adsbygoogle = window.adsbygoogle || []).push({}); 最佳答案 你做错了。rrd_graph对于-不接受$filename,它返回一个包含生成的图像信息的数组;它不输出或刷新任何图像数据。-$filename参数用于RRDGraph类。为了获得图像数据,您需要打开由rrd_graph生成的文件,读取其数据并输出数据,或者使用RRDGraph返回的array['image']键获取二进制图像数据。使用rrd_graph函数function create_graph($start, $graph_name, $fecha, $rrd_file, $input, $output, $host_ip, $iface_name, $tiempo) { $opts = array ( "--imgformat=PNG", "--slope-mode", "--title=$graph_name ($host_ip) - $iface_name - $tiempo", "--rigid", "--base=1000", "--height=120", "--width=500", "--alt-autoscale-max", "--lower-limit=0", "--font=TITLE:10:", "--font=AXIS:8:", "--font=LEGEND:8:", "--font=UNIT:8:30:", "--watermark=$fecha - Radu Radu", "--start=-$start", "--end=now", "DEF:a=$rrd_file:$input:AVERAGE", "DEF:b=$rrd_file:$output:AVERAGE", "CDEF:cdefa=a,8,*", "CDEF:cdefe=b,8,*", "AREA:cdefa#00CF00FF:Entrante\t", "GPRINT:cdefa:LAST:Actual\:%8.2lf %s", "GPRINT:cdefa:AVERAGE:Promedio\:%8.2lf %s", "GPRINT:cdefa:MAX:Máximo\:%8.2lf %s", "LINE1:cdefe#002A97FF:Saliente\t", "GPRINT:cdefe:LAST:Actual\:%8.2lf %s", "GPRINT:cdefe:AVERAGE:Promedio\:%8.2lf %s", "GPRINT:cdefe:MAX:Máximo\:%8.2lf %s" ); $fileName = "rrd.png"; $ret = rrd_graph($fileName, $opts); if(!$ret){ echo "ERROR en el objeto: $graph_name ".rrd_error()."\n"; } else { header("Content-Type: image/png"); header("Content-Length: " . filesize($fileName)); $fp = fopen($fileName, 'rb'); if($fp) { fpassthru($fp); fclose($fp); exit(); } }}使用RRDGraph类function create_graph($start, $graph_name, $fecha, $rrd_file, $input, $output, $host_ip, $iface_name, $tiempo){ $opts = array ( "--imgformat=PNG", "--slope-mode", "--title=$graph_name ($host_ip) - $iface_name - $tiempo", "--rigid", "--base=1000", "--height=120", "--width=500", "--alt-autoscale-max", "--lower-limit=0", "--font=TITLE:10:", "--font=AXIS:8:", "--font=LEGEND:8:", "--font=UNIT:8:30:", "--watermark=$fecha - Radu Radu", "--start=-$start", "--end=now", "DEF:a=$rrd_file:$input:AVERAGE", "DEF:b=$rrd_file:$output:AVERAGE", "CDEF:cdefa=a,8,*", "CDEF:cdefe=b,8,*", "AREA:cdefa#00CF00FF:Entrante\t", "GPRINT:cdefa:LAST:Actual\:%8.2lf %s", "GPRINT:cdefa:AVERAGE:Promedio\:%8.2lf %s", "GPRINT:cdefa:MAX:Máximo\:%8.2lf %s", "LINE1:cdefe#002A97FF:Saliente\t", "GPRINT:cdefe:LAST:Actual\:%8.2lf %s", "GPRINT:cdefe:AVERAGE:Promedio\:%8.2lf %s", "GPRINT:cdefe:MAX:Máximo\:%8.2lf %s" ); $graphObj = new RRDGraph('-'); $graphObj->setOptions($opts); $ret = $graphObj->saveVerbose(); if(!$ret){ echo "ERROR en el objeto: $graph_name ".rrd_error()."\n"; } else { header("Content-type: image/png"); echo $res['image']; exit(); }}对于类似的问题,你可以阅读问题和答案here。 (adsbygoogle = window.adsbygoogle || []).push({});
10-08 00:51