David Mously: Temporäre Einstellungen - unmöglich?

Hallo CGI-Profis,

ich habe ein etwas komplexes Problem; zum Verständnis erst einmal
die Vorgeschichte:

ich habe eine CD-ROM-Anwendung mit Director erstellt, die für interne
Zwecke gedacht ist und nicht in falsche Hände geraten sollte. Um die
Kontrolle über den Zugriff zu behalten, habe ich ein kleines Perl-
Script geschrieben, das entweder "yes" oder "no" ausgibt.

Beim Start der Anwendung auf CD fragt diese beim Server nach und je
nach Antwort des Scripts wird die Anwenung gestartet oder eben auch
nicht (vgl. <88705.html>, danke nochmal an Sönke!).

Das Script wiederum liest eine Textdatei "cdrom.txt", die nur das Wort
"yes" oder "no" enthält und gibt deren Inhalt an die CD-ROM-Director-
Anwendung zurück.

Achtung: jetzt wird es kompliziert:
-----------------------------------

Über ein zweites Perl-Script ist die Datei "cdrom.txt" via Browser
editierbar, sprich: ich kann über ein Formular bestimmen, ob sie den
Inhalt "yes" oder "no" haben soll.

(Demo:http://www.mously.com/cdrom, http://www.mously.com/cdrom/cdrom.txt)

Wenn ich den Inhalt nun von "no" auf "yes" geändert habe, möchte ich,
dass sich die Datei nach einem festgelegten Zeitraum - OHNE USER-
INPUT! - wieder auf "no" ändert.

Das ausführende Script muss also nach, sagen wir einer Stunde,
irgendwie auf dem Server gestartet werden und die Datei editieren.

Ist sowas generell machbar? Ohne eigenen Server sondern nur mit
eigenem CGI-Verzeichnis beim Webspaceprovider?

Oder kann ein Perl-Script nur dann Aktionen ausführen, wenn es
unmittelbar via Browser aufgerufen wird?

Gibt es irgend einen pfiffigen Workaround?

Vielen Dank!
David

<img src="http://www.mously.com/banner/170_24.gif" alt="">

PS: Ich habe mal gehört, dass man die CGI-Schnittstelle auch via
    E-Mail ansprechen kann und den Query-String einfach irgendwie
    in den Body schreibt. Gibt es da spezielle Server/Dienstleister
    die das anbieten? Wie funktioniert das?

  1. Hi,

    Wenn ich den Inhalt nun von "no" auf "yes" geändert habe, möchte ich,
    dass sich die Datei nach einem festgelegten Zeitraum - OHNE USER-
    INPUT! - wieder auf "no" ändert.

    warum speicherst Du nicht entweder "no" oder time()? Damit hast Du das Problem nicht.

    Cheatah

    1. Hallo Cheatah,

      warum speicherst Du nicht entweder "no" oder time()? Damit hast Du das Problem nicht.

      das verstehe ich nicht ganz. Dann wird der CDROM-Anwendung, die weder
      Perl versteht noch selbst irgendwelche Variablen lokal speichern kann,
      die Perl-Funktion time() übermittelt?

      MfG
      David

      <img src="http://www.mously.com/banner/170_24.gif" alt="">

      1. Hi,

        warum speicherst Du nicht entweder "no" oder time()? Damit hast Du das Problem nicht.

        das verstehe ich nicht ganz. Dann wird der CDROM-Anwendung, die weder
        Perl versteht noch selbst irgendwelche Variablen lokal speichern kann,
        die Perl-Funktion time() übermittelt?

        eigentlich müßte jede halbwegs brauchbare Programmiersprache die aktuelle Zeit in ähnlicher Form (Sekunden seit dem 1.1.1970) ermitteln können. Danach ist es trivial zu prüfen, ob die Stunde bereits verstrichen ist - also ob ein angenommenes Programm den Inhalt der Datei mittlerweile wieder auf "no" gesetzt hätte.

        Cheatah

        1. Hallo Cheatah,

          eigentlich müßte jede halbwegs brauchbare Programmiersprache die aktuelle Zeit in ähnlicher Form (Sekunden seit dem 1.1.1970) ermitteln können. Danach ist es trivial zu prüfen, ob die Stunde bereits verstrichen ist - also ob ein angenommenes Programm den Inhalt der Datei mittlerweile wieder auf "no" gesetzt hätte.

          das Problem ist nicht, daß das Programm sich nach einer Stunde selbst
          beenden soll - dazu könnte es die Systemzeit des Users bemühen und
          müsste nicht den Umweg über den Server nehmen. Dazu ist Lingo - davon
          gehe ich jetzt mal aus - durchaus in der Lage.

          Es geht darum, per Webseite eine einstündige Freischaltung der CD-ROM
          zu einzurichten, also ein "Zeitfenster" in dem das Programm überhaupt
          erst gestartet werden kann.

          Die Lösung (<89333.html>) steht schönerweise in in ihrer
          Einfachheit in keinem Verhältnis zur zunächst vermuteten Komplexität
          der Aufgabe :-)

          MfG
          David

          <img src="http://www.mously.com/banner/170_24.gif" alt="">

  2. Hi David,

    Gibt es irgend einen (...) Workaround?

    Du musst doch keine echte Text-Datei lesen. Ruf doch einfach ein Script (cdrom.txt.pl sozusagen) auf,
    das yes oder no zurückliefert. Das Script selber liest dann eine von dir erstellte Ablaufs-Datums-Datei,
    guckt ob die Zeit abgelaufen ist, und dann wird 'no' ausgegeben, sonst 'yes'.

    Dieses Script könnte jeden Aufruf protokollieren, bei jedem Aufruf eine Mail an dich schicken, bei Aufruf
    mit cdrom.txt.pl?id=cd-serienummer sogar sagen welche CD es war bzw. mehrere CD's verwalten.
    (Letzteres nur, wenn du dir die Mühe machen willst sie alle mit einer individuellen Seriennummer zu
    brennen.)

    Gruss,
    Carsten

    1. Hallo Carsten,

      Du musst doch keine echte Text-Datei lesen. Ruf doch einfach ein Script (cdrom.txt.pl sozusagen) auf,
      das yes oder no zurückliefert.

      Genau so ist es doch! Und bevor das Script etwas an die CDROM schickt,
      schaut es in cdrom.txt nach, ob es "yes" oder "no" schicken soll.
      Und schickt mir dann, paranoider Kontrollfreak ( ;-)), der ich nun mal
      bin, nicht nur eine Email sondern wahlweise auch eine SMS
      ( -> < http://www.mously.com/cdrom/>).

      Das Script selber liest dann eine von dir erstellte Ablaufs-Datums-Datei, guckt ob die Zeit abgelaufen ist, und dann wird 'no' ausgegeben, sonst 'yes'.

      Natürlich! Das ich da nicht selbst draufgekommen bin! Bei jedem setzen
      der Datei auf "yes" wird noch mittels time() (Danke, Cheatah!) die
      Uhrzeit in die Datei geschrieben.

      Beim Aufruf des Ausgabescript verfährt diese dann ca. so:

      if (cdrom.txt zeile 1 = no)  then  
      {
      print "no"
      }

      else if (cdrom.txt zeile 1 = yes)  then
      {
         if (cdrom.txt zeile 2 < aktuelle uhrzeit -1h) then
         {print "yes"}
         else
         {print "no"}
      }

      Vielen Dank!!!!

      MfG
      David

      <img src="http://www.mously.com/banner/170_24.gif" alt="">