apache — вывод PHP в тег img

У меня есть этот скрипт, который выводит изображение в командную строку, и если я перенаправляю его в файл file.png, я вижу правильно график, но если я пытаюсь сделать то же самое из браузера, я не вижу его на лету.

Я тоже пытался разбить скрипт на две части, но ничего не вышло.

1 -> Генерация графика
2 -> Вызвать первый скрипт из этого и сохранить все в переменной.

Сценарий:

<?php

header("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: // выход тоже без удачи.

Как я вижу в журнале, вывод идет в журнал сервера Apache.

"dic 21 10:58:00 xxx.xxx.com httpd[27941]: [305B blob data]"

Спасибо!!

3

Решение

Вы делаете это не правильно. rrd_graph не принимает - за $filename и возвращает массив с информацией о сгенерированном изображении; он не выводит и не сбрасывает данные изображения. - $filename параметр для RRDGraph учебный класс. Чтобы получить данные изображения, вам нужно либо открыть файл, сгенерированный rrd_graphчитать его данные и выводить данные или использовать RRDGraph возвращенный массив ['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();
}
}

Вы можете прочитать вопрос и ответы Вот за проблему похожую на вашу.

5

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]