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
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
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
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
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
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.
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.
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
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
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!
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;
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'
}
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"?
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".
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!
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".
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".
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
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".
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