Chris Weber: + (Perl) + (Server) + (Grafik) Verwirrendes Problem mit einer .gif-Grafik

Hallo,

Wie man in Thread-Titel sehen kann umfasst mein Problem ziemlich viele Tehembereiche, das hat aber schon seine Richtigkeit.  Also, ich habe mit Perl ein kleines CGI-Script geschrieben:

#!c:/perl/bin/perl.exe

print "Content-type: text/html\n\n";
print '<html>';
print '<head>';
print '<title>Danke</title>';
print '</head>';
print '<body>';
print '<hr>';
print 'Danke';
print '<br><br>';
print '<img src="fred.GIF" width=300 height=200 alt="" border="0">';
print '<hr>';
print '</body>';
print '</html>';

Dieses Script 'soll' eine HTML-Seite mit den Bild fred.GIF erstellen.  Das tut das Script auch, jedoch sehe ich im Browser das beruehmte rote Kreuz von IE.  Als ich mir im Browser dann die Eigenschaften vom Bild angeschaut habe, wurde dort eine Groesse von -1 Byte (!!!) angezeigt.  Ich dachte ich haette ein Bier zuviel getrunken, denn die Bilddatei HAT eine Groesse von 3,33 KB.  Die Bilddatei ist auch im richtigen Verzeichniss und der Quellcode von der generierten HTML-Seite ist sauber.  Ich habe mir dann natürlich auch die Error.log von OmniHttpd angeschaut und bin da auf folgende Zeile gestossen:

127.0.0.1 [10/Jun/1999:13:58:35 +0100] Standard CGI Launch "C:\Eigene Dateien\www\cgi-bin\fred.GIF": CreateProcess failed; error code = 193

Ich weiss echt nicht mehr weiter...es waere echt toll wenn Ihr mir mit meinem Problem helfen koenntet.

Danke.

  1. Nochmal hallo,

    sorry, dass ich wieder etwas geschrieben habe, ohne alle Eventuallitaeten auszukalkulieren, trotzdem denke ich, dass es vielleicht fuer andere hilfreich sein koennte.  Also, ich hatte das Bild im cgi-bin Ordner und verschob es in einen anderen, aenderte den Pfad in Script und es funzte.

    Trotzdem, das mit dem -1 Byte ist schon seltsam...weiss einer woran das liegt ?

    Ciao und sorry nochmal

    Chris Weber

    1. Hi,

      sorry, dass ich wieder etwas geschrieben habe, ohne alle Eventuallitaeten auszukalkulieren, trotzdem denke ich, dass es vielleicht fuer andere hilfreich sein koennte.  Also, ich hatte das Bild im cgi-bin Ordner und verschob es in einen anderen, aenderte den Pfad in Script und es funzte.

      Na also, gleiches Problem, gleiche Loesung ;-)
      Wir haben uns wohl ueberschnitten ...

    2. Hi,

      sorry, dass ich wieder etwas geschrieben habe, ohne alle Eventuallitaeten auszukalkulieren, trotzdem denke ich, dass es vielleicht fuer andere hilfreich sein koennte.  Also, ich hatte das Bild im cgi-bin Ordner und verschob es in einen anderen, aenderte den Pfad in Script und es funzte.

      Trotzdem, das mit dem -1 Byte ist schon seltsam...weiss einer woran das liegt ?

      ist wohl die "Standard-Pseudogröße" im Fehlerfall. Zumindest sind cgi-bin's zumeist so konfiguriert, daß man keine (non-Script-)Dateien direkt aus ihnen aufrufen kann; aus Unterverzeichnissen dito. Ist 'ne Sicherheitsfrage (denk an Dateien mit Passwörtern...).

      Cheatah

  2. Hallo Chris,

    Dieses Script 'soll' eine HTML-Seite mit den Bild fred.GIF erstellen.  Das tut das Script auch, jedoch sehe ich im Browser das beruehmte rote Kreuz von IE.  Als ich mir im Browser dann die Eigenschaften vom Bild angeschaut habe, wurde dort eine Groesse von -1 Byte (!!!) angezeigt.  Ich dachte ich haette ein Bier zuviel getrunken, denn die Bilddatei HAT eine Groesse von 3,33 KB.  Die Bilddatei ist auch im richtigen Verzeichniss und der Quellcode von der generierten HTML-Seite ist sauber.  Ich habe mir dann natürlich auch die Error.log von OmniHttpd angeschaut und bin da auf folgende Zeile gestossen:

    Das Problem hatte ich auch schon mal. Der Grund war, dass ich aus irgendeinem Grund das GIF-File nicht richtig in das CGI-Verzeichnis gekriegt habe.

    Wieso das so ist, weiss ich bis heute nicht.
    Meine 'Loesung' war, das GIF in ein anderes Verzeichnis zu stellen und dorthin zu referenzieren.
    Nicht besonders originell, aber es hat funktioniert.

    Angel

  3. Hallo,

    print '<img src="fred.GIF" width=300 height=200 alt="" border="0">';

    Dieses Script 'soll' eine HTML-Seite mit den Bild fred.GIF erstellen.  Das tut das Script auch, jedoch sehe ich im Browser das beruehmte rote Kreuz von IE.  Als ich mir im Browser dann die Eigenschaften vom Bild angeschaut habe, wurde dort eine Groesse von -1 Byte (!!!) angezeigt.

    Baut das Script ein GIF grafik oder lässt du nur den Befehl zum <img src... einfügen? (großer unterschied)

    Spontan fallen mir 3 sachen ein die nicht stimmen könnten.

    Punkt1 heißt es wirklich fred.GIF und nicht fred.gif (spielt aber nur bei Linux/Unix eine Rolle)

    punkt2 bin mir zwar nicht sicher, aber muß das " in perl nicht durch ein " geschützt sein?

    punkt3 das bild ist im CGI-bin verzeichniss, aber, wie wird das Skript aufgerufen? verusch mal das bild in dein normales Images verzeichniss zu legen, und es so "/images/fred.GIF" zu referenziern.

    Vielleicht hilfts was.

    Ciao
    Ludwig

    1. Hi!

      punkt4: Vom cgi-bin darf manchmal nicht gelesen werden. Soll heissen, nur Ausfuehren von Programmen/Scripten ist erlaubt, aber das direkt Uebertragen eines Dateininhaltes durch den Webserver ist verboten.

      Dieses Script 'soll' eine HTML-Seite mit den Bild fred.GIF erstellen.  Das tut das Script auch, jedoch sehe ich im Browser das beruehmte rote Kreuz von IE.  Als ich mir im Browser dann die Eigenschaften vom Bild angeschaut habe, wurde dort eine Groesse von -1 Byte (!!!) angezeigt.

      Was die -1 zu bedeuten hat, darueber hatte ich neulich mal ein bisschen gemutmasst: <../../sfarchiv/1999_2/t03841.htm#a18565>. Ob dabei der Error 404 (Datei nicht gefunden) kommt oder eine andere Nummer (Lesen verboten), ist erstmal nebensaechlich. Wichtig ist, dass der Browser das Bild nicht empfangen kann.

      Bye by Calocybe

  4. 127.0.0.1 [10/Jun/1999:13:58:35 +0100] Standard CGI Launch "C:\Eigene Dateien\www\cgi-bin\fred.GIF": CreateProcess failed; error code = 193

    Diese Fehlermeldung ist doch sehr aussagekräftig:

    Dein CGI-Verzeichnis ist so eingestellt, daß *jeder* Zugriff auf eine URL innerhalb dieses Teilbaums als CGI-Aufruf interpretiert wird.
    (Das ist wahrscheinlich bei den meisten "cgi-bin"-Verzeichnissen so.)
    Und was macht der arme Webserver, wenn er Dein GIF ansprechen soll? Er versucht, es auszuführen ... mit mäßigem Erfolg, wie man sich denken kann (Create Process failed).

    Meiner Meinung nach ist das keine Security-Problematik, sondern es ist eine Frage der Flexibilität für die Autoren von CGI-Anwendungen. Im Prinzip will der Webmaster denen nämlich *nicht* vorschreiben, in welcher Sprache sie ihre Anwendungen zu schreiben haben und welche Endungen die Dateien haben sollen. Alles, was in cgi-bin liegt, ist offensichtlich irgendwas Ausführbares - WIE das funktioniert, wird in den meisten Fällen in Zeile 1 der Datei drin stehen (ggf. magic number "#1" und dahinter der Pfadname eines Interpreters, falls nötig).

    Wenn man diesen Freiheitsgrad haben will, dann gibt man dafür einen anderen auf, nämlich das Recht, andere Dateien im selben Verzeichnis aufzuheben.

    Die Alternative wäre, in der Konfiguration des Webservers bestimmte Endungen fest mit dem Handler "CGI-Skript" zu verbinden. Bei Apache ist beispielsweise die Endung ".cgi" in dieser Weise vordefiniert; falls in einem Verzeichnis CGI-Anwendungen überhaupt ausgeführt werden dürfen (das wiederum kann man natürlich ein- und ausschalten), dann werden *.cgi-Dateien auch dann als CGI-Anwendungen ausgeführt, wenn NICHT der gesamte Teilbaum als CGI-Teilbaum (Apache: Anweisung "script-alias") definiert wurde.

    Fazit: Man kann sich bei der Konfiguration des Webservers entscheiden, was man haben will. Aber eben nicht beides gleichzeitig.