xitnalta: MIME von SSI-Seiten gesucht!

Hallo leuz!

http://www.teamone.de/cgi-local/sfasuch.pl?suchausdruck=ssi+mime&feld=titel&hits=alle hat mir nix gescheites geliefert und ich bin sicher, in SELFHTML auch noch nix gefunden zu haben.

Ich will per CGI eine Seite mit SSI ausgeben lassen können und vermute mal, dass der Server das mit Content-type: text/html nicht tun wird. Ich lese eine SSI-Seite ein, bearbeite sie ein wenig und müsste sie wieder mit dem richtigen Header ausgeben können.

Danke schonmal und bis nextens
xitnalta

  1. hi xitnalta,

    leider wird dir hier nix anderes übrigbleiben, als das .shtml mit dem CGI zu schreiben und dann darauf zu redirecten. Bei den Webservern, die ich bin jetzt gesehen habe, gibt es immer ein Modul, welches die SSIs handelt.

    Klar, könntest Du in Perl z.B. das SSI auch händisch parsen und dann die einzellnen Teile ausführen (so viel kann SSI ja nicht). Aber ist das sinnvoll?

    Meine Idee:

    Anfrage vom User -> CGI -> Modifikation der Seite -> Schreiben der Seite -> Redirect auf die Seite

    Oder du nimmst den Umgekehrten weg und machst eine SSI, die die Teile, die geändert gehören von einem CGI kriegt:

    <!-- #exec cgi="/cgi-bin/meinkleinesscriptdasvieletollesachenmacht.pl" -->

    ciao
    Martin

    Hallo leuz!

    http://www.teamone.de/cgi-local/sfasuch.pl?suchausdruck=ssi+mime&feld=titel&hits=alle hat mir nix gescheites geliefert und ich bin sicher, in SELFHTML auch noch nix gefunden zu haben.

    Ich will per CGI eine Seite mit SSI ausgeben lassen können und vermute mal, dass der Server das mit Content-type: text/html nicht tun wird. Ich lese eine SSI-Seite ein, bearbeite sie ein wenig und müsste sie wieder mit dem richtigen Header ausgeben können.

    Danke schonmal und bis nextens
    xitnalta

    1. Hallo Martin,

      Anfrage vom User -> CGI -> Modifikation der Seite -> Schreiben der Seite -> Redirect auf die Seite

      Das wird mir ehrlich gesagt zu komplex, da ich dann nach einer bestimmten Zeit die temporären Dateien wieder löschen müsste, weil wahrscheinlich viele auf das Script zugreifen werden und ich deshalb Zufallsnamen vergeben müsste.

      Vielleicht fällt ja noch jemandem etwas dazu ein, sonst werd ich versuchen, auf SSI zu verzichten. Mal schauen, irgendwie wirds ja wohl klappen...

      bis nextens
      xitnalta

  2. Hi Felix!

    Ich will per CGI eine Seite mit SSI ausgeben lassen können und vermute mal, dass der Server das mit Content-type: text/html nicht tun wird. Ich lese eine SSI-Seite ein, bearbeite sie ein wenig und müsste sie wieder mit dem richtigen Header ausgeben können.

    Meinst Du, Du machst in Deinem CGI die SSI-Ersetzungen selbst? Na wie auch immer, der MIME-Typ hat nichts damit zu tun, wie irgendwelche Daten *entstehen* (also ob da Dateien auf irgendeinem Rechner liegen, oder ob ein Script diese Daten produziert, oder ob die Daten entstehen, wenn man 2 Jahre lang getragene Socken bei 40 Grad waescht), sondern beschreibt lediglich, welches Format die Daten haben. Und wenn Deine Daten HTML darstellen, dann ist der richtige MIME-Typ eben text/html. Und wenn Du auf die ein oder andere Weise zu Daten im GIF-Format kommst, ist der richtige typ image/gif.

    So long

    1. Hallo Calocybe,

      Meinst Du, Du machst in Deinem CGI die SSI-Ersetzungen selbst?

      Nein, ich lese mit meinem CGI-Prog eine Datei ein, welche SSI nutzt, bearbeite sie ein wenig (damit ist _kein_ SSI-Parsing gemeint!) und will sie dann mitsamt den SSI-Befehlen wieder ausgeben ("Content-type: ??????\n\n$bearbeitetedatei").

      Und den Apache 2.0 beta (-> Cheatah) werde ich meinen "Auftraggebern" auch nicht antun wollen. Mal schauen, mittlerweile hab ich ehrlichgesagt vergessen, weshalb ich SSI eigentlich in den Dateien verwenden wollte *g*.

      bis nextens
      xitnalta

      1. Hi again!

        Nein, ich lese mit meinem CGI-Prog eine Datei ein, welche SSI nutzt, bearbeite sie ein wenig (damit ist _kein_ SSI-Parsing gemeint!) und will sie dann mitsamt den SSI-Befehlen wieder ausgeben ("Content-type: ??????\n\n$bearbeitetedatei").

        Ach so, jetz hab ich's auch kapiert. Naja, bisher war die Argumentation so, dass man das bisschen SSI-Parsing ja auch selber machen kann, wenn man schon CGI-scriptet. Und das stimmt auch, zumindest wenn man Perl benutzt. Ich hatte mir da mal ne kleine Routine geschrieben, um das #include file durchzufuehren, vielleicht nuetzt sie Dir ja was:

        use FileHandle;

        _ParseSSI($shtml)

        sub _ParseSSI($) {
            my $shtml = ref($_[0]) ? shift : $_[0];
            my ($incfile, $inctext);
            my $fh;

        $fh = FileHandle->new();

        while ($$shtml =~ /<!--\s*#include\s+file\s*=\s*"(.*?)"\s*-->/is) {
                $incfile = $1;
                $incfile = (($incfile =~ m^/) ? $gSSIRootDir : $gSSIWorkDir) . "/$incfile";

        if ($fh->open("<$incfile")) {
                    local $/; undef $/;
                    $inctext = <$fh>;
                    $fh->close();
                } else {
                    $inctext = "SSI error: Cannot open include file '$incfile' (Reason: $!)";
                    ::error(__PACKAGE__ . ": $inctext");
                }
                $$shtml =~ s/<!--\s*#include\s+file\s*=\s*".*?"\s*-->/$inctext/is;
            }

        return $shtml;
        }

        Ist ein bisschen an ein Projekt von mir angepasst. Eine ::error Funktion wird's bei Dir nicht geben, nimm stattdessen warn.
        $gSSIRootDir und $gSSIWorkDir sind Config Variablen, die die Verzeichnisse enthalten, in denen die dateien gesucht werden. Dabei wird $gSSIRootDir verwendet, wenn der file="" Pfad mit / anfaengt, anderfalls $gSSIWorkDir.
        Die anderen SSI-Kommandos hab ich halt noch nie gebraucht. *g*

        So long

  3. Hi,

    Ich will per CGI eine Seite mit SSI ausgeben lassen

    dann wirst Du nicht umhin kommen, Apache 2.0 beta zu installieren. Andere mir bekannte Server können das nämlich nicht.

    Cheatah