Forum Doku Wiki Blog

Forumsarchiv 2010, November
Geht so etwas mit "Server side include"?

archivierte Beiträge lesen

  1. (PROGRAMMIERTECHNIK) Geht so etwas mit "Server side include"? von Albler, 03. 11. 2010, 09:53

Geht so etwas mit "Server side include"?

Der folgende Beitrag wurde am 03. 11. 2010, 09:53 Uhr von Albler veröffentlicht.

Guten Morgen!
Ist ein Include möglich in Abhängigkeit vom Vorhandensein einer bestimmten Datei, also in etwa
if test.txt exists
  then include datei1.inc
else include datei2.inc.
Da "if" in SSI existiert gehtes letztlich darum, ob ich die Anwesenheit einer Datei abfragen kann.
Gruß
Albler

Geht so etwas mit "Server side include"?

Der folgende Beitrag wurde am 03. 11. 2010, 10:11 Uhr von suit veröffentlicht.

> Da "if" in SSI existiert gehtes letztlich darum, ob ich die Anwesenheit einer Datei abfragen kann.

http://wasd.vsm.com.au/doc/env/env_0400.html#07447665

Geht so etwas mit "Server side include"?

Der folgende Beitrag wurde am 03. 11. 2010, 11:14 Uhr von Albler veröffentlicht.

Hallo
> http://wasd.vsm.com.au/doc/env/env_0400.html#07447665
Danke für den Link.
Wenn ich es allerdings bei mir versuche mit

<!--#fcreated virtual="/Dok/inhalt_vorhanden.shtml" fmt="?" -->
<!--#if var={THE_FILE_NAME} eqs="" -->
Fehler
<!--#else -->
Korrekt
<!--#endif -->

kommen die Fehlermeldungen
[Wed Nov 03 11:07:19 2010] [error] [client 127.0.0.1] unknown directive "fcreated" in parsed doc D:/test/index.shtml
[Wed Nov 03 11:07:19 2010] [error] [client 127.0.0.1] too many arguments for if element in D:/test/index.shtml

Geht so etwas mit "Server side include"?

Der folgende Beitrag wurde am 03. 11. 2010, 11:23 Uhr von Vinzenz Mai veröffentlicht.

Hallo,

> > http://wasd.vsm.com.au/doc/env/env_0400.html#07447665

> <!--#fcreated virtual="/Dok/inhalt_vorhanden.shtml" fmt="?" -->
> <!--#if var={THE_FILE_NAME} eqs="" -->
[...]

> kommen die Fehlermeldungen
> [Wed Nov 03 11:07:19 2010] [error] [client 127.0.0.1] unknown directive "fcreated" in parsed doc D:/test/index.shtml

schon mal auf die Idee gekommen, die anderen genannten Direktiven auszuprobieren, wie z.B. #fsize?


Freundliche Grüße

Vinzenz

Geht so etwas mit "Server side include"?

Der folgende Beitrag wurde am 03. 11. 2010, 12:40 Uhr von Albler veröffentlicht.

Hallo,
> schon mal auf die Idee gekommen, die anderen genannten Direktiven auszuprobieren, wie z.B. #fsize?
Nein, da ich noch zu wenig von SSI verstehe.
Jetzt aber habe ich es versucht mit


<!--#fsize file="Dok/inhalt.shtml" -->
<!--#if var={THE_FILE_NAME} eq=0 -->
Fehler
<!--#else -->
Korrekt
<!--#endif -->

kommt noch eine Fehlermeldung:
too many arguments for if element in D:/test/index.shtml

Freundliche Grüße
Albler

Geht so etwas mit "Server side include"?

Der folgende Beitrag wurde am 03. 11. 2010, 12:58 Uhr von suit veröffentlicht.

> too many arguments for if element in D:/test/index.shtml

Je nach SSI-Implementierung ist die Syntax abweichend.

mod_include unter Apache hat z.B. eine leicht andere Syntax als das von mir verlinkte WASD SSI. Die SSI-Umsetzung im IIS weicht wieder etwas ab.

Unter mod_include ist die Syntax für eine Verzweigung <!-- #if expr="bedingung" --> - und je nach Server-Konfiguration kann das sogar nochmals abweichen wenn z.B. jemand die Begrenzer von <!-- und --> auf <SSI> und </SII> ändert.


Geht so etwas mit "Server side include"?

Der folgende Beitrag wurde am 03. 11. 2010, 13:12 Uhr von suit veröffentlicht.

> Unter mod_include ist die Syntax für eine Verzweigung <!-- #if expr="bedingung" --> - und je nach Server-Konfiguration kann das sogar nochmals abweichen wenn z.B. jemand die Begrenzer von <!-- und --> auf <SSI> und </SII> ändert.

Nachtrag: unter mod_include gibt es THE_FILE_NAME ebenfalls nicht, da kann man aber zum "-A"-Flag vor der Expression greifen.

Geht so etwas mit "Server side include"?

Der folgende Beitrag wurde am 03. 11. 2010, 17:20 Uhr von Albler veröffentlicht.

Hallo,
> > Unter mod_include ist die Syntax für eine Verzweigung <!-- #if expr="bedingung" --> - und je nach Server-Konfiguration kann das sogar nochmals abweichen wenn z.B. jemand die Begrenzer von <!-- und --> auf <SSI> und </SII> ändert.
>
> Nachtrag: unter mod_include gibt es THE_FILE_NAME ebenfalls nicht, da kann man aber zum "-A"-Flag vor der Expression greifen.
vielleicht könntet Ihr mich nochmals unterstützen.
Ich habe jetzt (unter Apache) angegeben

<!--#if expr="-A /Dok/inhalt.shtml" -->

Da kommt aber der Fehler:

invalid expression "-A /Dok/inhalt.shtml"

In der zitierten Doku steht:
This test only has an effect if SSIEnableAccess is on
Wo find ich diesen Parameter (falls es überhaupt daran liegen sollte)?
Gruß
Albler

Geht so etwas mit "Server side include"?

Der folgende Beitrag wurde am 03. 11. 2010, 17:38 Uhr von suit veröffentlicht.

> Wo find ich diesen Parameter (falls es überhaupt daran liegen sollte)?

in einem .htaccess File oder irgendwo in der Serverkonfiguration (siehe Doku).

Je nach Betriebssystem liegt die Konfiguration an unterschielichen orten

/etc/httpd/conf/httpd.conf ist afaik der Vorgabepfad unter RHEL, /etc/apache/ oder /etc/apache2/ ist ebenfalls ein guter Ansatzpunkt - in den meisten fällen heisst es eben httpd.conf

Natürlich können einzelne virtual hosts auch eigene Konfigurationsfiles haben in denen das eingestellt wird - in der httpd.conf steht dann meistens irgendwo am ende folgendes

Include /etc/httpd/conf/vhosts/*.conf

Geht so etwas mit "Server side include"?

Der folgende Beitrag wurde am 03. 11. 2010, 18:19 Uhr von Albler veröffentlicht.

> > Wo find ich diesen Parameter (falls es überhaupt daran liegen sollte)?
>
> in einem .htaccess File oder irgendwo in der Serverkonfiguration (siehe Doku).
>
Lt. meiner Apache-Doku kann man es in .htaccess angeben,

Description: Enable the -A flag during conditional flow control processing.
Syntax: SSIEnableAccess on|off
Default: SSIEnableAccess off
Context: directory, .htaccess
Status: Base
Module: mod_include

aber Pustekuchen:
Jetzt kommt die Meldung:
Invalid command "SSIEnableAccess", perhaps misspelled or defined by a module not defined in the server configuration.

Der Modul mod_include muss aber vorhanden sein, denn das SSI-include funktioniert ja!

EXEC aus SSI

Der folgende Beitrag wurde am 05. 11. 2010, 10:44 Uhr von Albler veröffentlicht.

Hallo,
ich hoffe, das liest noch jemand!
Nachdem ich mit der SSI-Abfrage auf Dateiexistenz nicht weiterkam,
habe ich jetzt eine andere Lösung gesucht und (fast) gefunden.
Ich rufe über SSI ein Perl-Programm auf, das die Prüfung vornimmt.
Das Perl-Programm erzeugt auch korrekt eine Environment-Variable mit dem Ergebnis (0 oder 1), die aber ist in dem rufenden Programm nicht vorhanden.
Was ist dafür die Ursache?


<html>
<head>
<title>Test</title>
</head>
<body>
<!--#set var="PRUEF_DATEI" value="/Test/t1.shtml" -->
<!--#exec cgi="/cgi-bin/fileexist.pl" -->
<!--#echo var="PRUEFUNG" -->
<!--#if expr="$PRUEFUNG=1" -->
ok
<!--#else -->
ko
<!--#endif -->
</body>
</html>




#!/usr/bin/perl -w
use strict;
use warnings;
use CGI::Carp qw(fatalsToBrowser);
my $datei=$ENV{'DOCUMENT_ROOT'}.$ENV{'PRUEF_DATEI'};
if (-e $datei)
  {$ENV{PRUEFUNG} = 1}                                          # Datei vorhanden
else
  {$ENV{PRUEFUNG} = 0}                                          # Datei nicht vorhanden
exit 0;

EXEC aus SSI

Der folgende Beitrag wurde am 05. 11. 2010, 13:43 Uhr von suit veröffentlicht.

> ich hoffe, das liest noch jemand!

Sicher, ich habe auch deinen anderen Post gelesen - konnte dazu aber nichts mehr beitragen.

> Ich rufe über SSI ein Perl-Programm auf, das die Prüfung vornimmt.

Warum machst du das include selbst nicht gleich mit Perl?

$file = '/foo.pl';
if (-e $file) {
  require 'foo.pl'
}

EXEC aus SSI

Der folgende Beitrag wurde am 05. 11. 2010, 14:40 Uhr von Albler veröffentlicht.

Hallo,
>
> Warum machst du das include selbst nicht gleich mit Perl?
>
> $file = '/foo.pl';
> if (-e $file) {
>   require 'foo.pl'
> }
Ich will die Datei nicht einfügen, sondern, wenn sie da ist, ein link auf sie erzeugen, wenn nicht, dann einen einfachen Text anzeigen (z.B. Seite vorübergehend nicht erreichbar).
Gruß
Albler
Da das für verschiedene Fälle funktionieren soll, möchte ich auch nicht die betr. HTML-Textstücke im PL-Programm erzeugen.

Gruß
Albler

PS. War der Verweis auf diesen "alten" thread so OK oder ist dies schon eine Art "Doppelposting"?

EXEC aus SSI

Der folgende Beitrag wurde am 07. 11. 2010, 18:57 Uhr von Alexander (HH) veröffentlicht.

Moin Moin!

> PS. War der Verweis auf diesen "alten" thread so OK oder ist dies schon eine Art "Doppelposting"?

Quengelposting. Vollkommen nutzlos obendrein, weil es viel weiter unten auf der Seite steht als dieser Thread.

Alexander
--
Today I will gladly share my knowledge and experience, for there are no sweeter words than "I told you so".

EXEC aus SSI

Der folgende Beitrag wurde am 08. 11. 2010, 09:49 Uhr von Albler veröffentlicht.

>
> Vollkommen nutzlos obendrein, weil es viel weiter unten auf der Seite steht als dieser Thread.

Wie bitte? Es steht viel weiter oben!
Wie kann ich auf etwas verlinken, was noch gar nicht vorhanden ist!

EXEC aus SSI

Der folgende Beitrag wurde am 08. 11. 2010, 15:31 Uhr von Alexander (HH) veröffentlicht.

Moin Moin!

> > Vollkommen nutzlos obendrein, weil es viel weiter unten auf der Seite steht als dieser Thread.
>
> Wie bitte? Es steht viel weiter oben!

Unten in meiner benutzerspezifischen Ansicht, und nicht nur in meiner.

Alexander
--
Today I will gladly share my knowledge and experience, for there are no sweeter words than "I told you so".

EXEC aus SSI

Der folgende Beitrag wurde am 05. 11. 2010, 14:17 Uhr von Alexander (HH) veröffentlicht.

Moin Moin!

> Das Perl-Programm erzeugt auch korrekt eine Environment-Variable mit dem Ergebnis (0 oder 1), die aber ist in dem rufenden Programm nicht vorhanden.
> Was ist dafür die Ursache?

Jeder Prozess hat eine eigene, private Kopie des Environments. Wird ein Kindprozess erzeugt, bekommt dieser entweder ein komplett neues Environment oder eine Kopie des Environments des aufrufenden Prozesses.

Alexander
--
Today I will gladly share my knowledge and experience, for there are no sweeter words than "I told you so".

EXEC aus SSI

Der folgende Beitrag wurde am 05. 11. 2010, 14:58 Uhr von Albler veröffentlicht.

Hi,
>
> Jeder Prozess hat eine eigene, private Kopie des Environments. Wird ein Kindprozess erzeugt, bekommt dieser entweder ein komplett neues Environment oder eine Kopie des Environments des aufrufenden Prozesses.
>
Von der Prozessverwaltung habe ich leider keine Ahnung.
Ich nehme aber an, dass das rufende html/SSI ein Prozess ist und das Perl-Programm der Kind-Prozess.
Wie wenn nicht über die Environment-Variablen, kann der Kind-Prozess Infos an den rufenden Prozess mitgeben?
Gruß
Albler

EXEC aus SSI

Der folgende Beitrag wurde am 07. 11. 2010, 18:55 Uhr von Alexander (HH) veröffentlicht.

Moin Moin!

> Von der Prozessverwaltung habe ich leider keine Ahnung.

Dann fang an zu lernen.

> Ich nehme aber an, dass das rufende html/SSI ein Prozess ist und das Perl-Programm der Kind-Prozess.

Typischerweise ja.

> Wie wenn nicht über die Environment-Variablen, kann der Kind-Prozess Infos an den rufenden Prozess mitgeben?

STDOUT, STDERR, andere vereinbarte Filehandles, Pipes, FIFOs, Unix Domain Sockets, TCP/IP-Sockets, Signale, SysV IPC, Shared Memory, ...

Alexander
--
Today I will gladly share my knowledge and experience, for there are no sweeter words than "I told you so".

EXEC aus SSI

Der folgende Beitrag wurde am 08. 11. 2010, 09:50 Uhr von Albler veröffentlicht.

> > Wie wenn nicht über die Environment-Variablen, kann der Kind-Prozess Infos an den rufenden Prozess mitgeben?
>
> STDOUT, STDERR, andere vereinbarte Filehandles, Pipes, FIFOs, Unix Domain Sockets, TCP/IP-Sockets, Signale, SysV IPC, Shared Memory, ...
>
Schön,
jetzt weiß ich, wie schlau du bist!

© 1998-2013 SELFHTMLImpressumSoftware: Classic Forum 3.4