我有这段代码,可以从普通图像生成二进制图像并将其显示为.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。 希望我能清楚地解释我的问题
答案 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()语句中使用该值之前,应确保所提交的值包含期望的值。