N.Bokov: [:::Ausführen von SSI im Perl-Skript zulassen:::]

Hallo,

wie kann man die SSI-Befehle im CGI(Perl)-Skripten zulassen?

Geht es irgendwie über die Konfig-Datei von Apache oder ist es überhaupt nicht möglich?

Danke.

  1. hallo,

    wie kann man die SSI-Befehle im CGI(Perl)-Skripten zulassen?

    Gar nicht. Andersherum geht es: du kannst per SSI ein perlscript aufrufen.

    Grüße aus Berlin

    Christoph S.

    1. use Mosche;

      wie kann man die SSI-Befehle im CGI(Perl)-Skripten zulassen?

      Gar nicht. Andersherum geht es: du kannst per SSI ein perlscript aufrufen.

      Das stimmt nicht, denn mit Apache 2 ist es möglich. Siehe http://httpd.apache.org/docs-2.0/howto/ssi.html mit AddOutputFilter.

      use Tschoe qw(Matti);

      --
      Anyone who quotes me in their sig is an idiot. -- Rusty Russell.
      Webapplikationen in C++ entwickeln
      1. hallo Matti,

        wie kann man die SSI-Befehle im CGI(Perl)-Skripten zulassen?
        Gar nicht. Andersherum geht es: du kannst per SSI ein perlscript aufrufen.
        Das stimmt nicht, denn mit Apache 2 ist es möglich. Siehe http://httpd.apache.org/docs-2.0/howto/ssi.html mit AddOutputFilter.

        Ähm, ich glaube, jetzt hast du nicht richtig gelesen. Daß du mit SSI zum Beispiel
          <!--#exec cgi="scriptname" -->
        einsetzen kannst, ist genau das, was ich geschrieben habe. Wenn du aber jetzt _innerhalb_ eines Perl-Scripts mit
          print "Content-type: text/html\n\n";
          print "<!--#exec cgi="scriptname" -->\n";
        arbeiten möchtest, bekommst du die schöne SSI-Anweisung als Quelltext ausgeliefert - und genau danach hat meines Erachtens der OP gefragt.

        Grüße aus Berlin

        Christoph S.

        1. use Mosche;

          Wenn du aber jetzt _innerhalb_ eines Perl-Scripts mit
            print "Content-type: text/html\n\n";
            print "<!--#exec cgi="scriptname" -->\n";
          arbeiten möchtest, bekommst du die schöne SSI-Anweisung als Quelltext ausgeliefert - und genau danach hat meines Erachtens der OP gefragt.

          Geht mit AddOutputFilter ab Apache Version 2. Ich habe es eben ausprobiert und es funktioniert, probier es doch einfach mal, bevor du behauptest, es würde nicht funktionieren.

          use Tschoe qw(Matti);

          --
          Anyone who quotes me in their sig is an idiot. -- Rusty Russell.
          Webapplikationen in C++ entwickeln
          1. hallo Matti,

            Geht mit AddOutputFilter ab Apache Version 2. Ich habe es eben ausprobiert und es funktioniert, probier es doch einfach mal, bevor du behauptest, es würde nicht funktionieren.

            Mich hat dasselbe Verhalten auch schon gelegentlich gestört. Bei meinem Apache 2.0.54 und mit AddOutputFilter war es mir in dieser Form bisher nicht möglich  -  andersherum gehts selbstverständlich. Ganz ohne Ausprobieren komme ich übrigens auch nicht aus ;-)

            Grüße aus Berlin

            Christoph S.

            1. use Mosche;

              Geht mit AddOutputFilter ab Apache Version 2. Ich habe es eben ausprobiert und es funktioniert, probier es doch einfach mal, bevor du behauptest, es würde nicht funktionieren.

              Mich hat dasselbe Verhalten auch schon gelegentlich gestört. Bei meinem Apache 2.0.54 und mit AddOutputFilter war es mir in dieser Form bisher nicht möglich  -  andersherum gehts selbstverständlich. Ganz ohne Ausprobieren komme ich übrigens auch nicht aus ;-)

              Was hast du denn gemacht?
              Ich habe hier Apache 2.0.53 laufen, und habe dabei folgendes aktiviert:

              matti@hansolo:/srv/httpd/cgi-bin$ cat .htaccess
              Options +Includes
              AddOutputFilter INCLUDES .pl

              matti@hansolo:/srv/httpd/cgi-bin$ cat test.pl
              #!/usr/bin/perl -w
              use strict;
              use CGI qw(header);
              print header();
              print <<EOF;
              <!--#include virtual="/test.html" -->
              EOF

              Gibt mir wie gewünscht den Inhalt von /test.html aus, wenn ich nach /cgi-bin/test.pl frage.

              use Tschoe qw(Matti);

              --
              Anyone who quotes me in their sig is an idiot. -- Rusty Russell.
              Webapplikationen in C++ entwickeln
  2. Hi,

    wie kann man die SSI-Befehle im CGI(Perl)-Skripten zulassen?
    Geht es irgendwie über die Konfig-Datei von Apache oder ist es überhaupt nicht möglich?

    Hängt, wie Matti schon schrieb, von der Apache-Version ab.

    Andere Möglichkeit:

    SSI ist ja nicht so wahnsinnig mächtig - das bißchen kann man eigentlich auch gleich per Perl-Script erledigen.

    cu,
    Andreas

    --
    Warum nennt sich Andreas hier MudGuard?
    Schreinerei Waechter
    Fachfragen per E-Mail halte ich für unverschämt und werde entsprechende E-Mails nicht beantworten. Für Fachfragen ist das Forum da.
    1. hallo,

      Hängt, wie Matti schon schrieb, von der Apache-Version ab.

      Nein. Mit Perl-Scripts konnte der Apache schon in sehr frühen Versionen problemlos umgehen, und SSI ist eine ebenfalls sehr alte "Apache-Erfindung". Die Apache-Version hat damit nichts zu tun.
      Aber: wenn ein Script HTML-Code produziert, reicht es den an den Server weiter. Der behandelt das aber _nicht_ genauso wie eine beliebige Anfrage eines Clients, sondern wertet eventuell darin enthaltene SSI-Anweisungen gar nicht mehr aus, sondern reicht das ganze HTML einschließlich SSI-Anweisung an den anfragenden Client weiter. Schickt ihm der Client aber eine Anfrage, die eine SSI-Anweisung enthält, wird die ausgewertet und ein eventuell aufzurufendes Perl-Script ebenfalls ausgeführt.

      SSI ist ja nicht so wahnsinnig mächtig - das bißchen kann man eigentlich auch gleich per Perl-Script erledigen.

      Es kann durchaus sinnvoll sein, SSI einzusetzen. Es macht nur keinen Sinn, SSI aus einem Script heraus anrufen zu wollen.

      Grüße aus Berlin

      Christoph S.

      1. Hi,

        Hängt, wie Matti schon schrieb, von der Apache-Version ab.
        Nein.

        Doch.

        Aber: wenn ein Script HTML-Code produziert, reicht es den an den Server weiter. Der behandelt das aber _nicht_ genauso wie eine beliebige Anfrage eines Clients, sondern wertet eventuell darin enthaltene SSI-Anweisungen gar nicht mehr aus, sondern reicht das ganze HTML einschließlich SSI-Anweisung an den anfragenden Client weiter.

        Und genau das ist im Apache 2.0 bei entsprechender Konfiguration eben anders: der Output eines Scripts kann durch einen weiteren Interpreter, z.B. SSI, gejagt werden.

        Schickt ihm der Client aber eine Anfrage, die eine SSI-Anweisung enthält,

        Daß SSI-Anweisungen in der Anfrage beachtet werden, halte ich für ein Gerücht.

        Es macht nur keinen Sinn,

        Nichts _macht_ Sinn …

        cu,
        Andreas

        --
        Warum nennt sich Andreas hier MudGuard?
        Schreinerei Waechter
        Fachfragen per E-Mail halte ich für unverschämt und werde entsprechende E-Mails nicht beantworten. Für Fachfragen ist das Forum da.
        1. hallo,

          Hängt, wie Matti schon schrieb, von der Apache-Version ab.
          Nein.
          Doch.

          Du wirst meinen Apache 2.0.54 sicher für einen Apache 2 halten. SSI darf er, und cgi kann er auch.

          Und genau das ist im Apache 2.0 bei entsprechender Konfiguration eben anders: der Output eines Scripts kann durch einen weiteren Interpreter, z.B. SSI, gejagt werden.

          Kleines Beispiel eines Perl-Scripts:

            
          print "Content-Type: text/html\n\n";  
          print "<!DOCTYPE HTML \"-//W3C//DTD HTML 4.01 Transitional//EN\">\n";  
          print "<html><head>\n";  
          print "<title>SSI-Test</title>\n";  
          print "</head>\n";  
            
          print "<body>\n";  
            
          print "<!--#config timefmt=\"%d.%m.%Y, %H.%M\" --><!--#echo var=\"DATE_LOCAL\" -->\n";  
            
          print "</body></html>\n";  
            
          exit;  
          
          

          Da passiert scheinbar gar nix, leere Anzeige. Kein Fehler im log. Im Quelltext erhält mein Browser (egal, welcher) aber die SSI-Anweisung.

          Nehme ich jetzt aber

            
            <!--#config timefmt="%d.%m.%Y, %H.%M" --><!--#echo var="DATE_LOCAL" -->  
          
          

          als Inhalt einer Datei "test.shtml" und rufe sie auf, kriege ich freundlicherweise Datum und aktuelle Uhrzeit, wie gewünscht. Ich kann natürlich auch noch ein "#exec cgi" anhängen, macht er auch mit, siehe http://de.selfhtml.org/servercgi/server/ssi.htm#variable

          Grüße aus Berlin

          Christoph S.

          1. use Mosche;

            Kleines Beispiel eines Perl-Scripts:
            [...]
            Da passiert scheinbar gar nix, leere Anzeige. Kein Fehler im log. Im Quelltext erhält mein Browser (egal, welcher) aber die SSI-Anweisung.

            Hast du denn den Server angewiesen, SSI aus der Ausgabe deines Perl-Skriptes heraus zu interpretieren? Das das mit .shtml-Dateien ist klar, falls du es entsprechend konfiguriert hast (was "shtml" annehmen lässt). Du musst es für dein Perl-Skript genauso machen.

            Irgendwo in deiner httpd.conf muss etwas stehen wie
            AddOutputFilter INCLUDES .shtml

            schreib doch dazu mal ne neue Zeile wie
            AddOutputFilter INCLUDES .pl

            (falls dein Skript mit .pl endet) und rufe es dann auf.

            use Tschoe qw(Matti);

            --
            Anyone who quotes me in their sig is an idiot. -- Rusty Russell.
            Webapplikationen in C++ entwickeln
            1. hallo Matti,

              Irgendwo in deiner httpd.conf muss etwas stehen wie
              AddOutputFilter INCLUDES .shtml
              schreib doch dazu mal ne neue Zeile wie
              AddOutputFilter INCLUDES .pl
              (falls dein Skript mit .pl endet) und rufe es dann auf.

              NameVirtualHost 10.0.0.1
              <VirtualHost 10.0.0.1>
                 ServerName de.virthost.test
                 ScriptAlias /cgi-bin "F:/cgi-bin"
                 DocumentRoot "F:/virthost"
                 Options Indexes FollowSymLinks MultiViews Includes ExecCGI
                 AddOutputFilter Includes .shtml .shtm .htm .php .pl
              </VirtualHost>

              [Tue May 24 18:18:41 2005] [notice] Apache/2.0.54 (Win32) PHP/5.0.4 DAV/2 configured -- resuming normal operations

              Es bleibt dabei: leere Ausgabe, kein Fehler im log, alle zuständigen Module übrigens geladen. Im Quelltext steht die SSI-Anweisung, wo sie ja auch nicht mehr stehen dürfte, wenn sie befolgt worden wäre. Und wie soll ich anders testen? Wie testest du das (ich will mich ja gerne belehren lassen)?

              Grüße aus Berlin

              Christoph S.

              1. use Mosche;

                Und wie soll ich anders testen? Wie testest du das (ich will mich ja gerne belehren lassen)?

                siehe https://forum.selfhtml.org/?t=108327&m=674384.

                use Tschoe qw(Matti);

                --
                Anyone who quotes me in their sig is an idiot. -- Rusty Russell.
                Webapplikationen in C++ entwickeln
                1. hallo Matti,

                  siehe https://forum.selfhtml.org/?t=108327&m=674384

                  Ja, danke, inzwischen hab ichs gelesen. Es gibt lediglich zwei Unterschiede: du hast ein anderes System genommen, und du bindest eine Datei ein, während ich eine Umgebungsvariable abgefragt habe - die kleinen Unterschiede in der Apache-Version halte ich für vernachlässigbar.

                  Ok, ich werde mal das System umschalten und nachschauen, ob Apache 2.0.54 unter FreeBSD das kann. Mit Windows klappts bei mir jedenfalls nicht.

                  Grüße aus Berlin

                  Christoph S.