flamingo: Hilfe!! interner Serverfehler - lokal klappt´s aber...

ich bringe dieses Skript auf dem Server vom Provider nicht zum Laufen!!! Ich erhalte immer die Fehlermeldung "error 500 - interner Serverfehler". Die Rechte chmod 755 habe ich gesetzt.  Bei mir lokal klappt es und ich bin mit meinem Latein am Ende...

Der Provider arbeitete auf Linux Betriebssystem mit MySql-Datenbank; bei mir zuhause habe ich Windows und Access (es sind bereits sämtliche DB-Einträge in die MySql-Datenbank importiert)

Kann mir jemand sagen, wo hier der verflixte Fehler liegt. Die Zugangsdaten für den connect ($dsn, $user, $password) sind lt. Provider richtig definiert. Kann es an den verwendeten Modulen liegen?

hier das Skript:

  
#! /usr/bin/perl  
  
#Daten zum Befüllen des Templates  
package Vorlage;  
 use HTML::Entities;  
 @abnr = ();  
  
package Programm;  
#Festlegen der verwendeten Perlmodule  
use DBI;  
use CGI qw( :cgi );  
use Text::Template;  
  
#Definition der allgemeinen Variablen  
my $dsn = 'xxx';  
my $user = 'xxx';  
my $password = 'xxx';  
my $formular = new CGI();  
  
my $templateName = '/perl_templates/test.html';  
my $documentRoot = $ENV{'DOCUMENT_ROOT'};  
  
#connect vorbereiten  
my $dbh = DBI->connect($dsn, $user, $password,  
                    {RaiseError => 1, AutoCommit => 1}) || die $DBI::errstr;  
  
$header = $formular->header(  
  -type => 'text/html'  
);  
  
#Auslesen aller Einträge aus T_TEST  
my $stmtHlesen = $dbh->prepare('select * from T_TEST');  
  
$stmtHlesen->execute()  
 || die "SQL-Fehler: " . $stmtHlesen->errstr . "\n";  
 my $i = 0;  
while (my $result = $stmtHlesen->fetchrow_hashref()) {  
 $Vorlage::abnr[$i] = $result->{AB_NR};  
 $i++;  
}  
$stmtHlesen->finish();  
  
  
#Schließen Datenbank-Handle  
$dbh->disconnect();  
  
my $template = new Text::Template (  
 TYPE => 'FILE',  
 SOURCE => $documentRoot . $templateName,  
 DELIMITERS => ['<%SHOP:', '/SHOP%>'],  
);  
  
  
#Ausgabe der Daten  
my $ausgabe = $template->fill_in(PACKAGE => 'Vorlage');  
  
print $header;  
print $ausgabe;  

Wäre super, wenn mir jemand helfen könnte :-)

  1. Moin!

    Kann mir jemand sagen, wo hier der verflixte Fehler liegt. Die Zugangsdaten für den connect ($dsn, $user, $password) sind lt. Provider richtig definiert. Kann es an den verwendeten Modulen liegen?

    Es wird mit Sicherheit an den Zeilenumbrüchen liegen. Perl unter Linux erfordert zwingend, dass Unix-Zeilenumbrüche verwendet werden. Perl unter Windows wird sinnvollerweise auch Windows-Zeilenumbrüche erlauben.

    Stimmen die Zeilenumbrüche nicht, kommt einfach nur Error 500 im Browser - das Error-Logfile deines Servers sollte dann mehr aussagen.

    Du mußt also dein Perl-Skript mit Unix-Zeilenumbrüchen abspeichern - beziehungsweise im ASCII-Modus hochladen (dann übernimmt FTP die Wandlung der Zeilenumbrüche).

    - Sven Rautenberg

    --
    "Bei einer Geschichte gibt es immer vier Seiten: Deine Seite, ihre Seite, die Wahrheit und das, was wirklich passiert ist." (Rousseau)
  2. Halihallo flamingo

    Das kann tausende von Ursachen haben. Ich empfehle hierzu die Lektüre von Michael
    http://aktuell.de.selfhtml.org/artikel/cgiperl/inbetriebnahme/index.htm

    #! /usr/bin/perl

    ohne Space! - #!/usr/bin/perl

    use CGI::Carp qw(fatalsToBrowser);

    my $dbh = DBI->connect($dsn, $user, $password,
                        {RaiseError => 1, AutoCommit => 1}) || die $DBI::errstr;

    Ein "die" sieht man ohne CGI::Carp oder eigene Routinen über den Browser nicht. Kommt
    der "die" vor der Headerausgabe[1], ist ein 500-er sozusagen vorprogrammiert.

    [1] unter der Bedingung, dass sowohl STDERR(default) und STDOUT autoflush-ed sind.

    Viele Grüsse

    Philipp

  3. Moin, moin!

    #! /usr/bin/perl
    Stimmt dieser Pfad zu Perl? Die Antwort gibt Dir der Provider. Und laß doch mal das Leerzeichen in der Zeile weg.

    Dann sollte da noch diese Zeile im Quellcode stehen (z. B. gleich als 2.):
    print "Content-type: text/html\n\n";

    Weitere Hinweise findest Du dort:
    http://selfhtml.teamone.de/cgiperl/intro/cgipublik.htm#probleme
    http://selfaktuell.teamone.de/artikel/cgiperl/inbetriebnahme/index.htm

    Alles klar?

    Norbert

    1. Dann sollte da noch diese Zeile im Quellcode stehen (z. B. gleich als 2.):
      print "Content-type: text/html\n\n";

      Nein, daran liegt es nicht, der OP benutzt CGI.pm

      Struppi.

  4. Kann mir jemand sagen, wo hier der verflixte Fehler liegt. Die Zugangsdaten für den connect ($dsn, $user, $password) sind lt. Provider richtig definiert. Kann es an den verwendeten Modulen liegen?

    Würde ich auch mal sagen. Du solltest, wie Phillipp dir schon rät, CGI::Carp verwenden, um solche Fehler zu sehen.

    use HTML::Entities;
    use Text::Template;

    Ich vermute mal das zweite 8ist z.b. bei meinem Hoster nicht installiert).
    z.b. http://www.scriptsolutions.com/programs/free/perldiver/ zeigt dir an, welche Module installiert sind.

    Struppi.