ホームオートメーションのセットアップに関連するデータを含むページをフィードするために、小さなサーバーに取り組んでいます。一番下のセクションのコメントを外すと、正常にクエリしてグラフ画像に出力できるセンサーデータでいっぱいのデータベースがあります。sqlite コードを手動で作成された out1 と out2 に置き換えることで、ブラウザから cgi スクリプトとしてアクセスしたときにグラフを印刷することもできます。これらは中央近くでコメントアウトされています。問題は、すべてをまとめて、グラフ化された sqlite データをブラウザーで cgi スクリプトとして表示しようとすると発生します。問題を接続コードに絞り込みました。それを別の方法で動作するスクリプトに追加すると、画像出力が得られません。しかし、接続コードが機能することは知っています。それは明らかなものでなければなりませんが、私はそれを見つけることができません。考え?
#!/usr/bin/perl -w
use CGI ':standard';
use DBI;
use GD::Graph::lines;
use strict;
my $dbh = DBI->connect(
"dbi:SQLite:dbname=/root/distancetest",
"",
"",
{ RaiseError => 1}
) or die $!;
my $sth = $dbh->prepare("SELECT * FROM distance");
$sth->execute();
my $row;
my @data;
my @out1;
my @out2;
while ($row = $sth->fetchrow_arrayref()) {
push(@out1, @$row[0]);
push(@out2, @$row[1]);
}
#@out1 = (1,2,3,4,5);
#@out2 = (1,2,3,4,5);
$data[0] = \@out1;
$data[1] = \@out2;
$sth->finish();
$dbh->disconnect();
my $skip = int ((@data * 8)/(600-50) + 1);
my $mygraph = GD::Graph::lines->new(600, 300);
$mygraph->set(
x_label => 'Timestamp',
y_label => 'cm',
title => 'Distance measuted at time',
line_types => [1],
line_width => 2,
x_labels_vertical => 1,
x_label_skip => $skip,
dclrs => ['blue'],
) or warn $mygraph->error;
$mygraph->set_legend_font(GD::gdMediumBoldFont);
$mygraph->set_legend('sensor1');
my $myimage = $mygraph->plot(\@data) or die $mygraph->error;
print "Content-type: image/png\n\n";
#open(OUTPUT, ">$0.png") or die "Can't open $0.png: $!\n";
#print OUTPUT $myimage->png();
print $myimage->png;