MIME von SSI-Seiten gesucht!
xitnalta
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
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
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
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
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
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;
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
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