atmaseva: Angabe eines relativen Pfads in einem perl script

Hallo zusamamen,

kann mir jemand sagen

a) warum während der Ausführung eines perl-scrips im meinem aktuellen Pfadnamen der Wert "/cgi-bin/cssProblem.css" steht?
Wenn nur "/cgi-bin/" drin stehen würde, hätte ich es noch verstanden.
b) hat jemand eine Lösung, wie ich dafür sorgen kann, dass ich innerhalb eines perl-scripts für die css-datei einen relativen Pfad angeben kann?
Gebe ich eine absoluten Pfad an, funktioniert es (siehe unten)

Vielen Dank
atmaseva

Hier meine Testprogramme

-------- index.html: -------------

<html><head>
<title>Tabelle ausgeben</title>
<link rel="stylesheet" type="text/css" href="form.css">
</head>
<body>
<!-- der aktuelle Pfad wird korrekt angezeigt -->
<script type="text/javascript">
<!--
 alert("Aktueller Pfad: " + window.location.pathname);
//-->
</script>

<!-- folgende Zeile ist nur ein Krügge, da ich z.Z. keine Lösung habe, um
ein Pearl-Script ohne Benutzeraktion innerhalb einer HTML zum Laufen zu bringen,
Anmerkung: die Lösung mit dem autmatischem Laden bringt mir nichts,
da ich innerhalb einer html-Datei mehrere pearl-scrips
(zum Lesen und ausgeben unterschiedlicher Dateien) ausgeben möchte
-->
<a href="/cgi-bin/cssProblem.pl">cssProblem anzeigen bzw. nicht anzeigen</a>

<!-- dies war mein Versuch mit SSI, leider scheint SSI auf meinem Rechner nicht zu funktionieren:
<!-- #exec cgi="/cgi-bin/cssProblem.pl" -->

</body>
</html>

--------- cssProblem.pl ----------------
#! C:/webserver/perl/perl -w

use strict;
use CGI::Carp qw(fatalsToBrowser);

print "Content-type: text/html\n\n";
print '<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">', "\n";
print "<html><head><title>Ausgabe der Tabelle</title>\n";

+++++ die folgende Zeile funktioniert nicht, da im Pfad "/cgi-bin/readFile.pl" steht ++++++

print '<link rel="stylesheet" type="text/css" href="form.css">', "\n";

+++++ mit der folgenden Zeile würde es funktionieren

print '<link rel="stylesheet" type="text/css" href="http://localhost/form.css">', "\n";

print "</head><body>\n";

++++ script zur Ausgabe des aktuellen Pfads. Ergebnis: "/cgi-bin/readFile.pl" ++++++++

print '<script type="text/javascript">', "\n";
print "<!--\n";
print 'alert("Aktueller Pfad: " + window.location.pathname)', "\n";
print "//-->";
print "</script>";

print "<h1 style='color:red'>Ausgabe der Tabelle</h1>\n"; # style-Angaben werden ausgeführt
print "<p class='test1'>Ausgabe der Tabelle</h1>\n"; # style-Angaben werden nicht ausgeführt
print '<p class="test2">Ausgabe der Tabelle</h1>', "\n"; # style-Angaben werden nicht ausgeführt

print "</body></html>\n";

-------- form.css: -------------
body { background-color:#80028F; color:white; }

a, p, li {
 font-family:Arial,Helvetica,sans-serif;
 font-size:15pt;
}

.test1 {
 font-family:Arial,Helvetica,sans-serif;
 font-size:17pt;
 text-align:left;
 font-style:italic;
}

.test2 {
 font-family:Arial,Helvetica,sans-serif;
 font-size:17pt;
 text-align:left;
 font-style:italic;
}

  1. hi,

    kann mir jemand sagen
    a) warum während der Ausführung eines perl-scrips im meinem aktuellen Pfadnamen der Wert "/cgi-bin/cssProblem.css" steht?

    weil du ihn dort hineingeschrieben hast

    b) hat jemand eine Lösung, wie ich dafür sorgen kann, dass ich innerhalb eines perl-scripts für die css-datei einen relativen Pfad angeben kann?

    du mußt die CSS-Datei ganz einfach auch dahin schreiben, wohin deine relative Pfadangabe zeigt.

    Gebe ich einen absoluten Pfad an, funktioniert es

    du kannst als absolute Pfadangabe für den lokalen Rechner auch Pfade wie "C:/pfad/zum/script" angeben

    Grüße

    Christoph S.

  2. Hallo,
    entscheidend ist, wo das perl-Script getartet wird.

    anzunehmen ist, das das perl-script im cgi-bin-Verzeichnis laufen muss (!) und auf chmod 755 gesetzt werden sollte.
    in diesem Fall genügt cssProblem.css als URL-Angabe.

    http://localhost/cgi-bin/cssProblem.css geht das denn überhaupt ?

    HTML-root ./cgi-bin/cssProblem.css

    ./ = dieses Verzeichnis ../ = ein Verzeichnis hoch (cacheable).
    http://localhost/eineDatei.css (not cacheable).

    sa

  3. Hallo zusamamen,

    --------- cssProblem.pl ----------------
    #! C:/webserver/perl/perl -w

    print '<link rel="stylesheet" type="text/css" href="form.css">', "\n";

    Hallo, so gehts:

    print '<link rel="stylesheet" type="text/css" href="/form.css">', "\n";

    Grüße von SabineP

  4. Hi,

    a) warum während der Ausführung eines perl-scrips
    im meinem aktuellen Pfadnamen der Wert
    "/cgi-bin/cssProblem.css" steht?

    Ich bezweifele diese Aussage.

    Denn das, was Du da ausgibst, ist eine JavaScript-
    Meldung. Zu diesem Zeitpunkt kann von "während der
    Ausführung eines Perl-Skripts" schon längst keine
    Rede mehr sein - das ist bereits fertig und hat seine
    Ausgabe an den Browser geschickt.

    b) hat jemand eine Lösung, wie ich dafür sorgen
    kann, dass ich innerhalb eines perl-scripts für
    die css-datei einen relativen Pfad angeben kann?

    Vergiß mal den Teil "innerhalb eines Perl-Skripts"
    und löse Dein Problem für eine statische HTML-Datei.
    Bei einem Perl-Skript mußt Du dann lediglich genau
    das ausgeben, was auch in der statischen Datei drin
    stehen würde.

    Gebe ich eine absoluten Pfad an, funktioniert es
    (siehe unten)

    Das kommt darauf an, _welchen_ statischen Pfad Du
    angibst, ob dort tatsächlich eine CSS-Datei mit
    diesem Namen existiert usw.

    Mit welchem Browser testest Du denn eigentlich?
    Nimm mal Netscape 4 - wenn nämlich Dein CSS-Pfad im
    ausgegebenen HTML-Code verkehrt ist, bekommst Du dort
    eine unübersehbare Fehlermeldung, während der M$IE
    solche Patzer hinter die Heizung fallen läßt.

    <!-- dies war mein Versuch mit SSI, leider scheint
    SSI auf meinem Rechner nicht zu funktionieren:

    Was passiert denn an dieser Stelle?

    Steht dieser Text auch noch im Quelltext des Dokuments,
    welches im Browser angezeigt wird? Dann ist das Doku-
    ment in der Tat nicht vom SSI-Handler geparsed worden.

    Wie hast Du SSI denn konfiguriert? (Für welche
    Verzeichnisse, für welche Endungen usw.)

    <!-- #exec cgi="/cgi-bin/cssProblem.pl" -->

    "include virtual" wäre sinnvoller.

    +++++ die folgende Zeile funktioniert nicht, da im Pfad "/cgi-bin/readFile.pl" steht ++++++

    print '<link rel="stylesheet" type="text/css" href="form.css">', "\n";

    Damit wirst Du nie glücklich werden.

    Stell Dir mal vor, Deine CSS-Datei würde tatsächlich
    dort liegen, wo Du sie mit dieser Anweisung erwartest.
    Das wäre dann "/cgi-bin/form.css".

    Jetzt überlege Dir mal, was passiert, wenn der Browser
    dieses Dokument vom Apache anfordert.
    1. Der Apache sieht sich den Pfad an,
    2. Er merkt, daß dies eine Datei ist, welche innerhalb
       von /cgi-bin/ liegt.
    3. Er versucht, sie _auszuführen_!
    Nicht etwa, ihren Inhalt an den Browser zu senden.
    So funktioniert das also nicht.

    Lies Dich mal in
    http://aktuell.de.selfhtml.org/artikel/cgiperl/inbetriebnahme/#a6
    ein.

    +++++ mit der folgenden Zeile würde es funktionieren

    print '<link rel="stylesheet" type="text/css" href="http://localhost/form.css">', "\n";

    Das liegt auch nicht innerhalb von /cgi-bin.

    Viele Grüße
    <img src="http://www.schroepl.net/projekte/gzip_cnc/gzip_cnc.gif" border=0 alt=""> Michael