Calocybe: MIME von SSI-Seiten gesucht!

Beitrag lesen

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