cornergraf: wieso startet mein cgi script nicht ? ich bitte um hilfe !

Geschrieben von cornergraf am 25. Juni 2000 17:31:25:

Hallo

Ich habe versucht einen text orientierten Besucher Zähler zu schreiben. Ich habe einen www server und perl installiert. Ich habe weiterhin den Script und die Zählerdatei ins cgi-bin Verzeichnis abgelegt. ich habe den Script mit Perl getestet, und er funktioniert. Aber von meinem Navigations Menü kriege ich ihn nicht gestartet ! ist vielleicht die schreibweise

#exec cgi="../cgi-bin/counter.pl"
(mit Kommentarzeichen natürlich)

nicht korrekt ? Wenn, wie muss ich es richtig schreiben ? und ausserdem, wie mache ich, dass die anzahl der besucher auch im navigations menü ausgegeben wird ?

#!/usr/bin/perl

open(COUNTERDAT, ")
{
$counternew = $_ +1;
}
close(COUNTERDAT);

open(COUNTERDAT, ">c:/www/cgi-bin/counter.dat") die "Could not write to file counter.dat\n";
print COUNTERDAT "$counternew" ;
close(COUNTERDAT);

print "$counternew\n" ;

Wird mit dem letzten print befehl in das navigations menü geschrieben, oder wie bekomme ich die zahlen dort hinein ? Ich hoffe mir kann hier hjemand helfen (und hoffentlich habe ich nicht alles falsch gemacht...)

danke !

  1. hi cornergraf,

    vielleicht die schreibweise

    #exec cgi="../cgi-bin/counter.pl"
    (mit Kommentarzeichen natürlich)

    nicht korrekt ? Wenn, wie muss ich es richtig schreiben ? und ausserdem, wie mache ich, dass die anzahl der besucher auch im navigations menü ausgegeben wird ?

    naja, kommt darauf an, wo dein script liegt...
    in deinem fall liegt die shtml-datei in einem unterverzeichnis parallel zum cgi-bin verzeichnis.

    Wird mit dem letzten print befehl in das navigations menü geschrieben, oder wie bekomme ich die zahlen dort hinein ? Ich hoffe mir kann hier hjemand helfen (und hoffentlich habe ich nicht alles falsch gemacht...)

    ja, print dient zum ausgeben von werten auf der standardausgabe

    cu pete

  2. auch hallo...

    #exec cgi="../cgi-bin/counter.pl"

    a) unterstuetzt der www-server SSI ?
    b) nicht jeder server, der SSI unterstuetzt, fuehrt auch alle befehle aus. (teilweise SSI-Unterstuetzung)
        #exec ist zum beispiel ein befehl, der auch gerne mal _nicht_ unterstuetzt wird, bzw. einige ssi-commands sind auch "insecure", die kann man ausstellen (ich kann mir vorstellen, dass exec dazugehoert)

    #!/usr/bin/perl

    was hast du fuer einen server?
    bei apache zum beispiel ist diese zeile wichtig (perl-pfad)
    bei omnihttpd stellt man den perl-pfad am server ein..

    open(COUNTERDAT, ")

    Dateiname? Datenflussrichtung?, haste wahrschienlich bloss vergessen hinzuschreiben (unten hastes ja gemacht)
    ausserdem sollte die entsprechende datei schon existieren (du willst sie ja schliesslich lesen)

    $counternew = $_ +1;

    $counternew = <COUNTERDAT> +1;
    (ob deine variante funktioniert, weiss ich nicht... .-))

    print "$counternew\n" ;

    das \n kannst du getrost weglassen, es sei denn, du willst wirklich ne neue zeile erzeugen.

    soweit, wie ich das beurteilen kann...

    cua

    n.d.p.

  3. Hoi,

    Ich kann meinem "Vorschreiber" n. d. parker nur zustimmen, allerdings ist da ein Logikfehler drin :)

    Wenn oben "#!/usr/bin/perl" angegeben ist, kann der Pfad zur Counterdatei nicht "C:\www\cgi-bin\counter.dat" und schon gar nicht "c:/www/cgi-bin/counter.dat" sein.

    Der Kopf, also der Aufruf des Perl-Interpreters in deinem Script ist im Linux-Format, die Pfadangaben in deinem Script jedoch im Windows-Format ...

    Grüße,
    Florian Auer

    1. Hi,

      Wenn oben "#!/usr/bin/perl" angegeben ist, kann der Pfad zur Counterdatei nicht "C:\www\cgi-bin\counter.dat" und schon gar nicht "c:/www/cgi-bin/counter.dat" sein.
      Der Kopf, also der Aufruf des Perl-Interpreters in deinem Script ist im Linux-Format, die Pfadangaben in deinem Script jedoch im Windows-Format ...

      lustigerweise ist das nicht unbedingt wahr. Auf einem Windows-System würde das Skript möglicherweise funktionieren.
      Der Perl-Interpreter kann als <laufwerksbuchstabe>:\usr\bin\perl installiert sein, wobei vermutlich der Laufwerksbuchstabe des Laufwerks genommen werden muß, auf dem der Webserver installiert ist. Perl akzeptiert unter Windows in Pfadnamen m. E. beide Arten der Separatoren (eben gerade *weil* man so durch Verwendung von "/" portablen Code schreiben kann).

      mfG - Michael

  4. Vielen dank, Leute !

    So viele Antworten in so kurzer zeit habe ich nicht erwartet. das agnze scheint jedenfalls komplizierter zu sein als ich dachte, mal sehen ob ich es verstehe wenn ich es nochmals durchlese.

    Tut mir leid wenn es euch åargert das ich meinen "alten" thread wieder hoch gebracht habe, wollte nur danke sagen...

  5. Hallo Cornergraf,

    #exec cgi="../cgi-bin/counter.pl"
    (mit Kommentarzeichen natürlich)

    Wenn    #exec nicht funktioniert, versuch es doch mal mit
    #include  virtual="../cgi-bin/counter.pl" , das kommt ganz auf die Serverconfig an.

    open(COUNTERDAT, ">c:/www/cgi-bin/counter.dat") die "Could not write to file counter.dat\n";
    print COUNTERDAT "$counternew" ;
    close(COUNTERDAT);

    print "$counternew\n" ;

    Ersetze den absoluten Pfad doch noch durch einen relativen, der liegt ja wohl im selben Verzeichnis, also open(COUNTERDAT,"counter.dat"), das macht sich einfach besser.
    Dann noch die Schreibrechte für counter.dat überprüfen und dann müßte das schon funktionieren.

    MfG
    Andy Magdeburg

    1. Hallo

      Wenn    #exec nicht funktioniert, versuch es doch mal mit
      #include  virtual="../cgi-bin/counter.pl" , das kommt ganz auf die Serverconfig an.

      habe ich versucht, kein erfolg :-(

      Ersetze den absoluten Pfad doch noch durch einen relativen, der liegt ja wohl im selben Verzeichnis, also open (COUNTERDAT,"counter.dat"), das macht sich einfach besser.

      habe ich auch versucht, funktioniert immer noch nicht

      Dann noch die Schreibrechte für counter.dat überprüfen und dann müßte das schon funktionieren.

      wie gesagt habe ich den script n der DOS shell schon mit perl getestet, und er funktionierte. Es muss also an irgendetwas anderem liegen. Ich verstehe blos nicht an was es liegen könnte.

      Ich werd es bestimmt dann rauskriegen, wenn ich absolut kein zeit dazu habe mich damit zu beschäftigen...

      falls jemand mehr informationen braucht habe ich weiter oben noch eine nachricht mit ein par mehr infos geschickt.

      1. Na, dann noch ein Versuch

        Mach mal die Konfiguration von Omnihttp auf, gehe auf Global Server Settings (oder so ähnlich) und auf der letzten Klappkarte müßte ein Kästchen zum Abhaken sein: "Process Server Side Includes". Das maleben abhaken.
        Wenn es dann immer noch nicht läuft, dann ... *schulternzuck*

        MfG
        Andy