Ich bin absoluter Perl-Anfänger, habe zu meinem Problem hier nichts im Forum gefunden. Es geht darum dass ich ein Skript, mit dem ich per GD::Graph::lines einen Verlauf darstellen will, nicht zum Laufen bekomme.
Ich habe mir den aktuellen xampp-Server runtergeladen, das Perl-Addon installiert und außerdem noch ActivePearl installiert. Da GD::Graph::lines nicht bei xampp (und Perl-Addon) dabei ist, habe ich es per ppm installiert. Nun habe ich das Skript in das cgi-bin Verzeichnis meines xampp gelegt und dann per shebang zeile den Activepearl Interpreter eingestellt. Außerdem habe ich noch das lib-Verzeichnis von ActivePearl (für GD::Graph::lines) eingefügt. Wenn ich das Skript jetzt aufrufe bekomme ich als Fehler:
Can't locate object method "new" via package "GD::Graph::lines" at C:/Programme/xampp/cgi-bin/temperatur.pl line 88.
Hier noch mein Skript:
- Code: Select all
#!c:/perl/bin/perl.exe
use lib qw(C:/perl/site/lib);
print @INC;
########
#
use strict;
use GD::Graph::lines;
use DBI;
use CGI;
use CGI::Carp qw(fatalsToBrowser);
my $cgi = CGI::new();
########
# Variable und Grundwerte definieren
my @daten0; # Sensordaten 0
my @daten1; # Sensordaten 1
my @einteilung; # Einteilung der Y-Achse
my $filename = "digitemp/linuxfocus2.png"; # Bildname zur Zwischenspeicherung
# Ueberschrift der Grafik
my $g_ueberschrift = "Temperatur Verlaufs Uebersicht / Tag aktuell / Zeit aktuell / aufgeteilt nach Monate";
# Beschriftung Y-Achse der Grafik
my $x_beschriftung = "Monate";
########
# HTML Ausgabe erstellen
print $cgi->header();
print $cgi->start_html;
print $cgi->startform();
#print $cgi->p( {-align => 'center'},
# $cgi->submit( -name =>'submit',
# -label =>'Grafik anzeigen' ));
print $cgi->endform();
########
# Datenbankabfrage und Grafik nur anzeigen wenn submit gedrückt wurde
#if ($cgi->param('submit')) {
# Datenbankabfrage
@einteilung = db_abfrage("select zeit from messwerte");
# Abfrage für Sensor0
@daten0 = db_abfrage("
select sensor1 from messwerte
");
# Abfrage für Sensor1
@daten1 = db_abfrage("
select sensor2 from messwerte
");
grafik_erstellen(\$filename, \@einteilung, \@daten0, \@daten1);
# ---------------------------------------------------------------------
# HTML Ausgabe abschluss
print "<img src=\"../../$filename\" alt=\"$filename\" border=\"0\">";
#} # END - Grafik anzeigen wenn submit gedrückt wurde
########
# Rest HTML Ausgabe
print $cgi->hr;
print '<p align="center"> <a href="../../digitemp/index.html">zurück</a> </p>';
print $cgi->end_html;
################################################
# SUB SUB SUB SUB SUB SUB
sub grafik_erstellen {
# ----------------------------------------------------------------------------
# Daten der Grafik
my @graph_data = (
\@einteilung,
\@daten0, # Achswert 1
\@daten1, # Achswert 2
);
# Grafik erstellen und Grösse der Grafik festlegen X,Y
my $graph = GD::Graph::lines->new(1000, 350);
# Legende der beiden Achswerte
$graph->set_legend( "Temperatur Rechner Innen", "Temperatur Aussen");
# Grafik Parameter setzen
$graph->set(
title => $g_ueberschrift, # Titel der Tabelle
x_label => "Temperatur", # Beschriftung der X-Achse
x_label => $x_beschriftung, # Beschriftung der Y-Achse
y_max_value => 50, # Y-Achse Maximalwert
y_min_value => -20, # Y-Achse Minimalwert
y_tick_number => 14, # Y-Achse Abzahl der Aufteilungen
y_label_skip => 2, # Y-Achse Zeile bei der Beschriftung übersprungen werden sollen
long_ticks => 1, # Linien X,Y in die Grafik zeichnen
x_ticks => 0, # Línien X wieder ausblenden
);
# Grafik erstellen
my $gd_bild = $graph->plot( \@graph_data );
# ---------------------------------------------------------------------
# Grafik in Datei zwischenspeichern
open (FH, "> ../../$filename");
binmode FH;
# Grafik ausgeben / schreiben
print FH $gd_bild->png;
close(FH);
}# END - grafik_erstellen()
###############################################
sub db_abfrage {
my($sql) = @_;
# --------------------------------------------------------------------
# Datenbank initialisieren
my $datasource = "dbi:mysql:database=test";
my $user = "root";
my $pass = "";
my $db = DBI->connect($datasource, $user, $pass)
or die "Verbindung zur Datenbank nicht möglich: " . $DBI::errstr;
# Datenbank Abfrage
my $sth; # Datenbank Arbeits Parameter
$sth = $db->prepare($sql)
or die "prepare nicht möglich";
$sth->execute()
or die "execute nicht möglich";
my @row; # Zwischenspeicher für Datenbankzeile
my @rueckgabe; # Rückgabe Array
while (@row = $sth->fetchrow_array()){
# Werte der Zeile durch ein ',' trennen
# und Zeilen in einem Array speichern
push (@rueckgabe, join(",",@row));
}
# Abfrage ende
$sth->finish();
# Datenbank schliessen
$db->disconnect;
# Werte als Array zurückgeben
return @rueckgabe;
}# - END db_abgrage()
__END__
KAnn es sein, dass mein GD::Graph::lines gar keine new-Methode hat? Ich hab den Quelltext aus einem Beispiel im Netz, hier zu finden:
http://www.linuxfocus.org/Deutsch/July2004/article342.shtml
Würde mich über Hilfe sehr freuen!
Vielen Dank im Voraus,
Rthe1