|
|
|||||||
![]() |
SSI mit Xitami als Include
Ein CGI-Script mit Variabeln per GET-Methode soll mittels CGI eingebunden werden.
<!--#include virtual="/cgi-bin/script.cgi?test=test1" --> Je nach Version von Xitami sind unterschiedliche Änderungen notwendig: Xitami 2.4x Xitami 2.5x Xitami 2.4xDamit Xitami ebenfalls mit <!--#include virtual="/cgi-bin/script.cgi?test=test1" --> umgehen kann, sind einige Änderungen in der Datei perlssi direkt im Programmverzeichnis von Xitami (unterhalb von webpages und cgi-bin) notwendig.Folgendes muss aus der Datei gelöscht werden:
elsif ($ssi =~ /^include/i) {
&WhichFile;
if ($errno == 0) {
open (FOO, $filename);
$bigline = join ('', <FOO>).$bigline;
close (FOO);
}
else {
print "<P>#include file not found: $filename";
&GiveErrMsg;
}
}
Dafür muss an gleicher Stelle folgendes eingefügt werden:
elsif ($ssi =~ /^include/i) {
if ($ssi =~ /virtual="([^"?]+)(\??([^"]*))"/i) {
$infile = $1;
$args = $3;
&MakePathname;
$var = $outfile;
if ($errno == 0) {<
# We can now execute the CGI script in $var
$ENV {"QUERY_STRING"} = $3;
# First, handle MS-DOS systems
if (defined ($ENV {"COMSPEC"})) {
$var =~ s/\//\\/g;
# Try normal executable programs first
if ($var =~ /\.exe$|\.com$|\.bat$/i) {
$_ = `$var $args`;
}
else {
# Check file header to see if it's a script
# We're looking for '#! xxxx' or '/*! xxxx'
open (FOO, $var);
$_ = <FOO>;
chop;
close (FOO);
if (/^\#\!\s*(.+)|^\/\*\!\s*([^*]+)\*\//) {
$_ = `$1 "$var" $args`;
}
else {
print "<P>Cannot execute $var";
&GiveErrMsg;
}
}
}
# Handle other systems (OS/2 may need to be handled as DOS)
else {
$_ = `$var $args`;
}
# If output has HTTP header fields, skip to blank line
if (/^[A-Z-]+: /i) {
/\n\n/;
print $';
}
else {
print $_;
}
}
}
}
Die modifizierte perlssi zum Download
Xitami 2.5xIn der Datei xitami.cfg (im Hauptverzeichnis von Xitami) müssen folgende Änderungen vorgenommen werden:Im Abschnitt [Filter] müssen folgende Zeilen eingefügt werden: .shtml = perlssi .shtm = perlssi .ssi = perlssiIm Abschnitt [Ssi] muss der Wert von exec von 0 auf 1 geändert werden.
exec=1
Im Abschnitt [Wsx] müssen folgende Zeilen gelöscht werden:
.shtm=xixssi .shtml=xixssi .ssi=xixssiIn der Datei perlssi (im gleichen Verzeichnis) muss nach
&WhichFile;
if ($errno == 0) {
open (FOO, $filename);
$bigline = join ('', <FOO>).$bigline;
close (FOO);
}
else {
print "<P>#include file not found: $filename";
&GiveErrMsg;
}
}
gesucht und durch folgendes ersetzt werden:
if ($ssi =~ /virtual="([^"?]+)(\??([^"]*))"/i) {
$infile = $1;
$args = $3;
&MakePathname;
$var = $outfile;
if ($errno == 0) {
# We can now execute the CGI script in $var
$ENV {"QUERY_STRING"} = $3;
# First, handle MS-DOS systems
if (defined ($ENV {"COMSPEC"})) {
$var =~ s/\//\\/g;
# Try normal executable programs first
if ($var =~ /\.exe$|\.com$|\.bat$/i) {
$_ = `$var $args`;
}
else {
# Check file header to see if it's a script
# We're looking for '#! xxxx' or '/*! xxxx'
open (FOO, $var);
$_ = <FOO>;
chop;
close (FOO);
if (/^\#\!\s*(.+)|^\/\*\!\s*([^*]+)\*\//) {
$_ = `$1 $var $args`;
}
else {
print "<P>Cannot execute $var";
&GiveErrMsg;
}
}
}
# Handle other systems (OS/2 may need to be handled as DOS)
else {
$_ = `$var $args`;
}
# If output has HTTP header fields, skip to blank line
if (/^[A-Z-]+: /i) {
/\n\n/;
print $';
}
else {
print $_;
}
}
}
else {
&WhichFile;
if ($errno == 0) {
open (FOO, $filename);
$bigline = join ('', <FOO>).$bigline;
close (FOO);
}
else {
print "<P>#include file not found: $filename";
&GiveErrMsg;
}
}
}
Die modifizierte perlssi zum Download
Allgemeine InformationenXitami benötigt einen relativen Pfad zur .shtml-Datei (../file.cgi bzw. /cgi-bin/file.cgi).Dateien, welche innerhalb eines CGIs geöffnet oder geschrieben werden, müssen immer mit kompletter Pfadangabe angegeben werden. also z.B. /xitami/cgi-bin/test/test.dat, auch wenn sich das CGI im cgi-bin-Verzeichnis befindet. Dieser Artikel wurde zugesandt von: Jürg Sommer, knowledge@cgicorner.ch Weiterführende Links:
|
||||||