cgicorner.ch ¦ CGI Hilfe ¦ Knowledge Base ¦ SSI mit Xitami als Include    
   http://www.cgicorner.ch

Main Download CGI Hilfe Knowledge Base Links Gaestebuch Witze-Bereich Sitemap Impressum

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" -->
funktioniert nicht und <!--#exec cgi="/cgi-bin/script.cgi?test=test1" -->
funktioniert nur bei Xitami, nicht aber bei einem anderen Server (so dass möglicherweise alles abgeändert werden muss, wenn die Datei auf einen anderen Server kopiert wird.


Je nach Version von Xitami sind unterschiedliche Änderungen notwendig:
Xitami 2.4x
Xitami 2.5x

Xitami 2.4x

Damit 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.5x

In 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 = perlssi
Im 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=xixssi
In 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 Informationen

Xitami 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:


 
Druckfreundliche Version zum Anfang der Seite
Copyright (c) 2012 by cgicorner.ch
Diese Seite ist ein Teil von http://www.cgicorner.ch
URL dieser Seite: http://www.cgicorner.ch/cgi-bin/kb/kb.cgi?file=ssi_xitami.kb
Letzte Änderung: 6. März 2002