用php,jquery显示二进制图像

时间:2018-09-10 10:43:38

标签: javascript php jquery

我有这段代码,可以从普通图像生成二进制图像并将其显示为.img

 $host=$_POST['hostname'];
  $type=$_POST['type_char'];
 include('rrdtools.inc.php');
  include('graphs/'.$type.'.inc.php');


  function graph_error($string,$rrd_options)
  {


  $graphfile ='/tmp/'. strgen().'.png';

  $rrd_options .= ' HRULE:0#555555';
   $rrd_options .= " --title='".$string."'";

   rrdtool_graph($graphfile, $rrd_options);

   header('Content-type: image/png');
   $fd = fopen($graphfile, 'r');
    fpassthru($fd);
   fclose($fd);
   unlink($graphfile);

    }


     graph_error($type,$rrd_options);

我使用ajax将主机名type_char发送到文件,这是代码

$('.print_graph').click(function(e) {
    e.preventDefault();
    var type_char='fortigate_sessions';//$('#graph').val();
    var hostname='10.10.0.144';//$(this).attr('id');
    //$('#device_host').val(id);

    $.ajax({  
type: 'POST',  
url: 'SNMP/graph.php', 
data: {'hostname':hostname,'type_char':type_char },
success: function(data) {
     alert(data);
        // show the response
   $("#grph").attr("src", 'SNMP/graph.php');
         console.log(data);
}
});

如您在javascript代码中所见,我使用此代码显示图像

$("#grph").attr("src", 'SNMP/graph.php');

,此代码将再次调用graph.php而没有参数,结果是错误的 如何将参数传递给graphs.php。 希望我能清楚地解释我的问题

1 个答案:

答案 0 :(得分:0)

您可以通过使graph.php查找GET参数而不是POST来解决此问题,然后直接设置图像源,而无需使用AJAX:

更改

$host=$_POST['hostname'];
$type=$_POST['type_char'];

$host=$_GET['hostname'];
$type=$_Get['type_char'];

还要更改

$.ajax({  
  type: 'POST',  
  url: 'SNMP/graph.php', 
  data: {'hostname':hostname,'type_char':type_char },
  success: function(data) {
     alert(data);
    // show the response
    $("#grph").attr("src", 'SNMP/graph.php');
   console.log(data);
  }
});

简单

$("#grph").attr("src", 'SNMP/graph.php?hostname='+hostname+'&type_char='+type_char);

这意味着graph.php返回的图像数据将直接在img标记中使用,而不是在JavaScript变量中结束。


P.S。我注意到您正在使用$type变量在PHP中直接创建一个include()语句。这可能是非常不安全的,因为您要让客户端对执行什么代码有非常直接的控制权,而这可能会被滥用来执行此时不应执行的代码。在include()语句中使用该值之前,应确保所提交的值包含期望的值。