Jochen Rentschler: Problem mit CGI-Skript "WWWThreads"

Hallo zusammen!

Vor kurzem habe ich das Programm "WWWThreads 2.6" (http://www.screamingweb.com/wwwthreads) in mein cgi-bin-Verzeichnis installiert (auf einem Unix-Server in D).

Nach der Zuteilung der einzelnen Rechte (chmod) lief das Forum auch stabil und alle Features funktionierten nahezu fehlerfrei. Nur einen Fehler konnte ich bis dato nach mehreren Tagen noch immer nicht ausräumen:

Wenn man in das Forum einen Beitrag schreibt und diesen absendet, so erscheint nie das Datum und die Uhrzeit für die Nachricht. Alles andere funktioniert jedoch einwandfrei, nur wird weder in der Forenübersicht als auch in einzelnen Foren ein Datum oder die Uhrzeit angezeigt.

Das Skript habe ich von einem Bekannten überprüfen lassen und er meinte, daß es eigentlich problemlos funktionieren sollte. Auch den Support meines Providers habe ich das Skript kontrollieren lassen, dort hieß es "...das es funktionieren sollte". Tja, mehrere Installationsversuche und stundenlanges rumgefummele waren leider vergeblich, weshalb ich mich nun an Euch wende.

Hat einer Erfahrung mit o.g. Forumsystem?

Was könnten mögliche Fehlerquellen sein, wenn nur das Datum und die Uhrzeit nicht erscheinen, der Rest jedoch funktioniert? Das Skript ist in Perl geschrieben und die Dateien für Informationen zu den Foren und Nutzern (.db) sind vom Skript auf chmod 666 gesetzt.

Folgendes scheint im Skript dafür zuständig zu sein, die Zeit und das Datum vom Server zu holen:

#***********************************************************************

Get_Date - Get the Date and Assign it to variables

#***********************************************************************

sub get_date{
   $currtime=time();
   $adjust=$currtime+($adjusttime*3600);
   $fulldate=totaltime($adjust);
}

Über jede Hilfe für einen CGI-Anfänger würde ich mich wirklich freuen, da ich langsam an dem Skript verzweifle und der Programmierer leider auch keinen Support mehr anbietet. Vielen Dank im voraus!

Mit freundlichen Grüßen,

Jochen Rentschler

  1. Hallo Jochen!

    $fulldate=totaltime($adjust);

    Von der Funktion totaltime(...) hab ich noch nie was gehoert. Aber wenn der auf dem Server installierte Perl-Interpreter die nicht kennen wuerde, wuerde er andererseits eine Fehlermeldung bringen.

    Hast Du das Script mal mit dem Aufruf des Perl-Interpreters mit der Option -cw laufen lassen? (Dadurch lassen sich hin und wieder auch verstecktere Probleme aufdecken).

    Ansonsten musst Du mal genau den Weg der Variablen $fulldate bis zum HTML-print verfolgen. Vielleicht faellst Dir dort noch irgendwas Ungewoehnliches auf.

    Viele Gruesse
      Stefan Muenz

    1. Hallo Stefan!

      Vielen Dank für Deine ersten Tips, doch leider haben Sie mir bislang nicht weitergeholfen.

      $fulldate=totaltime($adjust);
      Von der Funktion totaltime(...) hab ich noch nie was gehoert. Aber wenn der auf dem Server installierte Perl-Interpreter die nicht kennen wuerde, wuerde er andererseits eine Fehlermeldung bringen.

      Das $adjust bezieht sich auf einen Wert in einer anderen Datei des Skripts und soll zur Einstellung der Zeit dienen (eine Stunde vor = 1, bzw. eine Stunde zurück = -1). Der Unterpunkt get_date sollte eigentlich stimmen:

      sub get_date{
         $currtime=time();
         $adjust=$currtime+($adjusttime*3600);
         $fulldate=localtime($adjust);
      }

      Der Begriff time() ist doch fester Bestandteil des Perl-Interpreters oder wird dabei auf eine externe Quelle/Datei zugegriffen? Funktioniert time() und localtime() erst ab einer bestimmten Perl-Version? Ich habe es ebenfalls ohne die Zeile $adjust probiert und stattdessen $fulldate=localtime(time) gemacht - ebenfalls ohne Erfolg.

      Als ich probeweise versuchte time() gegen "/bin/date" zu ersetzen, erntete ich einen "500 Internal Server Error" und alle Skripts von WWWThreads mußten gelöscht und neu installiert werden.

      Hast Du das Script mal mit dem Aufruf des Perl-Interpreters mit der Option -cw laufen lassen? (Dadurch lassen sich hin und wieder auch verstecktere Probleme aufdecken).

      Nein, aber ich habe ehrlich gesagt keine Ahnung, wie ich das anstellen sollte. Der Server steht bei meinem Provider und ich weiß nicht, wie ich da den Perl-Interpreter das Skript checken lassen kann, ohne es auszuführen.

      Ansonsten musst Du mal genau den Weg der Variablen $fulldate bis zum HTML-print verfolgen. Vielleicht faellst Dir dort noch irgendwas Ungewoehnliches auf.

      Mir ist leider nichts besonderes aufgefallen, da ich jedoch Anfänger in Sachen Perl/CGI bin, ist es gut möglich das ich (offensichtliche) Fehler übersehen haben könnte.

      Allerdings wird bereits in die .db-Dateien der Foren keine Uhrzeit reingeschrieben - keine Ahnung warum (wegen chmod 666 oder weil /data-Verzeichnis im cgi-bin?), doch dadurch kommt wahrscheinlich der Ausgabefehler (kein Datum/keine Uhrzeit - sonst alles okay) zustande.

      Letztlich ist meine Situation wie folgt: Der Programmierer des Skripts gibt keinerlei Support, der Support meines Providers meint "das es funktioneren müßte" und ich tippe jetzt schon seit drei Wochen an diesen Skripts rum, die scheinbar überall funktioneren - nur nicht auf meinem Serverplatz. Zudem sollte das Ganze inzwischen voll funktionsfähig online sein - dumme Sache das.

      Die Skripts laufen derzeit unter #!/usr/bin/perl. Ich möchte dafür inzwischen auch gerne jemanden beauftragen, der mir das Ganze installiert (gegen entsprechende Bezahlung), doch leider kenne ich da niemanden.

      Nunja, für jede weitere Hilfe wäre ich sehr dankbar.

      Mit freundlichem Gruß,

      Jochen Rentschler

      1. Hallo Jochen ...

        Der Unterpunkt get_date sollte eigentlich stimmen:

        sub get_date{
           $currtime=time();
           $adjust=$currtime+($adjusttime*3600);
           $fulldate=localtime($adjust);
        }

        Der Begriff time() ist doch fester Bestandteil des Perl-Interpreters oder wird dabei auf eine externe Quelle/Datei zugegriffen?

        Ja. Du kannst aber die Funktionen mal auf Kommando-Ebene überprüfen:

        perl -e 'print scalar localtime'

        localtime wirkt ohne Parameter wie localtime(local). Normalerweise gibt localtime eine
        Liste von Werten zurück:

        ($sekunden, $minuten, $stunden, $tag, $monat, $jahr, $wochentag, $jahrestag, $isdst) = localtime;

        Im Skalaren Kontext sollte NICHT die Anzahl der Elemente der List zurück, sondern sollte einen String erzeugen, der der ctime Funktion entspricht...

        Tue Aug  4 14:52:09 1998

        Dieser soll wohl auch sicherlich von Deinem Skript verwendet werden ...

        Sollte der obige Perl-Test nicht funktionieren, aber

        perl -e 'print join("-", localtime)'

        eine Ausgabe bringen, die mit dem aktuellen Datum zusammenhängt, dann könnte man als workaround den gewünschten String selbst zusammenstellen

        Viel Erfolg,
           Jörk

      2. Hast Du das Script mal mit dem Aufruf des Perl-Interpreters mit der Option -cw laufen lassen? (Dadurch lassen sich hin und wieder auch verstecktere Probleme aufdecken).

        Nein, aber ich habe ehrlich gesagt keine Ahnung, wie ich das anstellen sollte. Der Server steht bei meinem Provider und ich weiß nicht, wie ich da den Perl-Interpreter das Skript checken lassen kann, ohne es auszuführen.

        ------------------------------

        Wenn ich mich einmischen darf, (bin auch ein Perl Anfänger), kann ich dir einen Freeware Web-Server empfehlen der Perl-Interpreter dabei hat. Um quasi, lokal perl-scripts zu testen.
        Server heißt SAMBAR-Server und ich habe es auf Win32 getestet.

        Wenn du Compuserve-Zugriff hast GO GERINT, wenn nicht frage mal eine Suchmaschine (Stichwörter: SAMBAR, Server, etc.)

        Viel Erfolg