Angabe eines relativen Pfads in einem perl script
atmaseva
- cgi
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";
print '<link rel="stylesheet" type="text/css" href="form.css">', "\n";
print "</head><body>\n";
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;
}
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.
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
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
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