skript funzt nicht über Browser, nur direkt in kommandozeile
Carmaus
- cgi
Hallo,
ich habe ein Problem und weiß nicht, wie ich es beheben kann. Ich habe ein Perl-Skript geschrieben, welches in der Kommandozeile aufgerufen einwandfrei funktioniert. Wenn ich es jedoch über den Browser probiere, kommt immer folgende Fehlermeldung:
Internal Server Error
The server encountered an internal error or misconfiguration and was unable to complete your request.
Please contact the server administrator, [no address given] and inform them of the time the error occurred, and anything you might have done that may have caused the error.
More information about this error may be available in the server error log.
Woran könnte das liegen? Das Skript liegt im cgi-bin-Verzeichnis und andere cgi-Skripte funktionieren auch einwandfrei. Nur dieses eben nicht.
Ich hoffe, mir kann jemand helfen.
Carmaus
Internal Server Error
The server encountered an internal error or misconfiguration and was unable to complete your request.
das kann alles mögliche sein.
Please contact the server administrator, [no address given] and inform them of the time the error occurred, and anything you might have done that may have caused the error.
More information about this error may be available in the server error log.
und mehr Informationen stehen in deiner server log Datei
Struppi.
und mehr Informationen stehen in deiner server log Datei
Leider sitze ich hier in der Uni und bin nicht der Admin. Ansonsten hätte ich schon nachgeschaut.
Hallo,
Leider sitze ich hier in der Uni und bin nicht der Admin.
Dann rede mit den Admins. Wer das Recht hat, CGI-Scripts zu schreiben benötigt auch das Recht, den Error-Log anzusehen. Ohne diese Informationen ist die Fehlersuche reine Glückssache.
BTW: Sind auch alle notwendigen Module installiert und kann der Webserverprozess darauf zugreifen?
Grüße
Klaus
Dann rede mit den Admins. Wer das Recht hat, CGI-Scripts zu schreiben benötigt auch das Recht, den Error-Log anzusehen. Ohne diese Informationen ist die Fehlersuche reine Glückssache.
BTW: Sind auch alle notwendigen Module installiert und kann der Webserverprozess darauf zugreifen?
Grüße
Klaus
Alles korrekt installiert. Wie gesagt: Wenn ich das skript aus dem cgi-bin-Verzeichnis aus über die Commandline aufrufe, klappt es. Nur wenn ich es aus dem Browser heraus aufrufe, dann kommt die Fehlermeldung.
Alles korrekt installiert. Wie gesagt: Wenn ich das skript aus dem cgi-bin-Verzeichnis aus über die Commandline aufrufe, klappt es. Nur wenn ich es aus dem Browser heraus aufrufe, dann kommt die Fehlermeldung.
Wie gesagt versuch mal es hinzukriegen, das der Browser anzeigt was falsch läuft ein 500'er Fehler ist nicht hilfreich.
Struppi.
Ach so. Falls es bei der Fehlersuche helfen könnte.
Hier das Skript (aber wie gesagt: es funzt ja, nur nicht über den Browser aufgerufen):
#!/usr/bin/perl -w
use strict;
use CGI; # Einbinden des Moduls 'CGI'
my $cgi = new CGI; # Erstellen eines neuen Objekts $cgi
use CGI::Carp qw(fatalsToBrowser); # Hierdurch werden Fehler an den Browser weitergeleitet
use Bio::Tools::Run::StandAloneBlast;
use Bio::Seq;
# reading infile
my @infile;
my $id;
my $seq = "";
open (INFILE, "test.fasta") or die "cant open test.fasta";
@infile = <INFILE>;
chomp(@infile);
close INFILE;
$id = $infile[0];
shift(@infile);
foreach my $line (@infile) {
$seq = $seq.$line;
}
$seq =~ s/\s//g;
my @params = ('program' => 'blastx', 'outfile' => 'testscriptout.blout');
my $factory = Bio::Tools::Run::StandAloneBlast->new(@params);
my $input = Bio::Seq->new(-id =>$id, -seq =>$seq);
my $blast_report = $factory->blastall($input);
exit;
Ja, das hilft. Das Programm ist kein CGI Programm, es gibt keinen Header aus.
und ein paar Verbesserungen:
open (INFILE, "test.fasta") or die "cant open test.fasta";
Hier kannst du zusätzlich noch den Grund für die ausgeben:
open (INFILE, "test.fasta") or die "cant open test.fasta. weil: $!";
@infile = <INFILE>;
chomp(@infile);
das kannst du zusammenfassen:
chomp(@infile = <INFILE>);
close INFILE;
$id = $infile[0];
shift(@infile);
Das auch:
$id = shift @infile;
foreach my $line (@infile) {
$seq = $seq.$line;
Das läßt sich einfacher schriben:
$seq .= $line;
Aber vermutlich willst du einfach
$seq = join "", @infile;
Struppi.
Ja, das hilft. Das Programm ist kein CGI Programm, es gibt keinen Header aus.
das weiß ich. Es ist ja auch nur ein Test-Skript zur Fehlersuche, weil das eigentliche Skript nicht funktioniert hat. Ich bin zwar noch recht neu in der CGI-Programmierung (und auch Perl insgesamt), aber ich dachte, man kann doch trotzdem einfach ein Perl-Skript über die Adressleiste des Browsers starten, oder? Es gibt mi zwar dann nichts im Browser zurück, aber es müsste doch zumindest hier in meinem Fall dann ein outfile in dem cgi-Verzeichnis erzeugen.
Hallo Carmaus
Ja, das hilft. Das Programm ist kein CGI Programm, es gibt keinen Header aus.
das weiß ich. Es ist ja auch nur ein Test-Skript zur Fehlersuche, weil das eigentliche Skript nicht funktioniert hat. Ich bin zwar noch recht neu in der CGI-Programmierung (und auch Perl insgesamt), aber ich dachte, man kann doch trotzdem einfach ein Perl-Skript über die Adressleiste des Browsers starten, oder? Es gibt mi zwar dann nichts im Browser zurück, aber es müsste doch zumindest hier in meinem Fall dann ein outfile in dem cgi-Verzeichnis erzeugen.
Im Browser wird dann aber ein Fehler angezeigt, aber das Skript sollte arbeiten, du solltest trotzdem weigstens einen header zurückgeben, dann siehst du was falsch läuft.
print CGI::header();
reicht ja schon.
Struppi.
Im Browser wird dann aber ein Fehler angezeigt, aber das Skript sollte arbeiten, du solltest trotzdem weigstens einen header zurückgeben, dann siehst du was falsch läuft.
Hallo Struppi
Das dachte ich ja auch, jedoch arbeitet es nicht, denn ich habe anschließend keine neue Datei im Verzeichnis, obwohl das Skript eine erzeugen sollte. Ich probiers aber trozdem mal mit dem header. Kann mir allerdings nicht vorstellen, dass es dann funzt.
Trotzdem Danke,
Carmaus
Das dachte ich ja auch, jedoch arbeitet es nicht, denn ich habe anschließend keine neue Datei im Verzeichnis, obwohl das Skript eine erzeugen sollte. Ich probiers aber trozdem mal mit dem header. Kann mir allerdings nicht vorstellen, dass es dann funzt.
naja, funzen wird es sowieso nie - du meinst funktionieren, oder?
Mit header hast du eine wahrscheinlichkeit, das du einen Fehler angezeigt bekommst.(evtl. stimmt der Pfad nicht, da in CGI's './' nicht unbedingt der aktuelle d.h. das CGI Verzeichniss sein muss)
Struppi.
hallo zusammen,
naja, funzen wird es sowieso nie - du meinst funktionieren, oder?
schliesse mich struppis meinung an und behaupte: 'funzen' ist das schlimmste unwort an möchtegern-hacker-slang das mir jemals untergekommen ist und mir wird jedesmal schlecht wenn ich es irgendwo lesen muss.
trotzdem liebe grüsse...
Hello,
Internal Server Error
The server encountered an internal error or misconfiguration and was unable to complete your request.
Das Thema hatte ich vor einer Woche auch erst. Da konnte mir auch keiner eine plausible Erklärung geben. Ich habe dann zwar den Weg herausgefunden, wie es funktioniert, aber der ist nicht zufriedenstellend.
Musst mal im Archiv suchen "PERL Rechte Tom"
Liebe Grüße aus http://www.braunschweig.de
Tom