Mike: Von cgi-bin Ordner auslesen, der NICHT im cgi-bin liegt..??

Ich bitte vielmals um Entschuldigung (verbeug!) -aber ich war so schusselig, in meinem vorher gesendeten Beitrag die Überschrift zu vergessen (was ich hier versucht habe, nachzuholen) ;)

Der Beitrag (nochmal):

Ich schreibe solche mails wirklich erst, wenn es gar keine andere Möglichkeit mehr gibt -aber im Moment weiß ich nicht weiter. Folgendes ist mein Problem:

Ich arbeite an einem Script, daß alle in einem bestimmten Ordner liegenden Bilder (.gif etc.) einlesen und diese übersichtlich in einer HTML-Seite darstellen soll (ich benutze lokal Omni-HTTP und ActivePerl auf Windows 98).

Leider musste ich jetzt aber feststellen, daß Bilder, die im cgi-bin Verzeichnis liegen, nicht im Browser dargestellt werden (es sind wahrscheinlich nur .cgi und .pl-Dateien dort erlaubt). Na schön, dachte ich, dann kopiere ich den Ordner mit den Bildern eben in ein nicht-cgi Verzeichnis irgendwo anders (schon noch auf dem Server, aber eben nicht mehr im cgi-bin Ordner). Nun kann der Browser sie zwar wieder darstellen -aber das Script findet diesen Ordner nicht und kann ihn demnach auch nicht auslesen. (Verwirrung!?)

Es ist wie ein Teufelskreis: im cgi-bin Ordner kann das SCRIPT den Bilder-Ordner finden und die Dateinamen lesen -aber der BROWSER  stellt diese nicht dar bzw. findet sie nicht. Und wenn die Bilder NICHT im cgi-bin Verzeichnis liegen, ist es genau andersrum: dann findet der Browser die Bilder, aber im Script kann ich den Ordner nicht mir readdir() auslesen.

-Wer weiß einen Rat und kann mir hier weiterhelfen? Soweit ich weiß, gehen alle 'professionellen' Scripts (z.B. UBB etc.) nach dem Schema vor, daß alle Grafiken in einem Non-Cgi Verzeichnis ausserhalb des cgi-bin Bereichs liegen. -Aber wie kann man dann auf solche Verzeichnisse zugreifen und sie auslesen? Oder kann es vielleicht sein, daß ich Omni-HTTP nicht richtig konfiguriert habe?

P.S.: Das Script sollte allerdings auch auf jedem anderen Server lauffähig sein -also bringt mir eine 'massgeschneiderte-nur-in-diesem-Fall' Lösung leider nichts.

Ich hoffe auf Hilfe (Daumen drück!!)

Mike

www.x-pressive.com

X-PRESSIVE.COM MULTIMEDIA DESIGN

ONLINE GAMES - FLASH BOARD - MULTIMEDIA - SCREEN SAVERS

  1. Hallo,

    Es ist wie ein Teufelskreis: im cgi-bin Ordner kann das SCRIPT den Bilder-Ordner finden und die Dateinamen lesen -aber der BROWSER  stellt diese nicht dar bzw. findet sie nicht. Und wenn die Bilder NICHT im cgi-bin Verzeichnis liegen, ist es genau andersrum: dann findet der Browser die Bilder, aber im Script kann ich den Ordner nicht mir readdir() auslesen.

    Das Script findet den ordner nur, wenn Du den Pfad auf dem Server angibst. Es ist ja so, daß die Pfadangaben in einem URL nicht mit dem Pfad im Dateisystems übereinstimmen. Das Script kann aber nur was mit Pfaden im Dateisystem etwas anfangen.

    Also mußt Du auch diese Pfade für die Verarbeitung verwenden.
    Beispiel:
    Das 'URL-Verzeichnis' '/cgi-bin' zeigt bei Dir vielleicht im Ordner 'C:\webserver\scripte'.
    Dein Bildverzeichnis-URL '/tolle-bilder' zeigt auf 'D:\Daten\bilder'.

    willst Du jetzt den Inhalt Deines Bildverzeichnisses auslesen, dann greifts DU mit

    opendir(DIRHDL,'D:\Daten\bilder');

    auf dieses zu und nicht mit:

    opendir(DIRHDL,'/tolle-bilder');

    Alles klar?

    P.S.: Das Script sollte allerdings auch auf jedem anderen Server lauffähig sein -also bringt mir eine 'massgeschneiderte-nur-in-diesem-Fall' Lösung leider nichts.

    Einfach eine Konfigurationsdatei in einem Dir bekannten Pfad am server anlegen oder eben das Script dementsprechend anpassen.

    Dabei solltest Du beachten, daß das aktuelle Verzeichnis des Scripts nicht immer das Verzeichnis ist, in dem es gerade liegt. Verschiedene Webserver-Konfigurationen können da ganz schön Verwirrung stiften.

    Grüße
      Klaus

  2. Hi,

    Leider musste ich jetzt aber feststellen, daß Bilder, die im cgi-bin Verzeichnis liegen, nicht im Browser dargestellt werden (es sind wahrscheinlich nur .cgi und .pl-Dateien dort erlaubt).

    Es ist nicht der Browser, der sie nicht darstellt - es ist der Webserver,
    der ihre Daten nicht zum Browser liefert.
    Das liegt an der Art und Weise, wie Dein CGI-Verzeichnis definiert ist.

    Dabei gibt es zwei Möglichkeiten (Syntax: Apache, Semantik: allgemeingültig).

    a) "richtige" CGI-Verzeichnisse
       (http://httpd.apache.org/docs/mod/mod_alias.html#scriptalias)
       Definiert, daß alles, was innerhalb eines URL-Teilbaums liegt, vom Webserver
       als CGI-Anwendung interpretiert und "ausgeführt" werden soll.
       Das passiert mit Deinen Bildern: Der Webserver "führt sie aus", produziert
       dabei eine Fehlermeldung statt korrekter Graphikdaten und überträgt dies
       zu Deinem Browser, der damit nichts anfangen kann.

    b) Verbindung zwischen Dateinamensmuster und "Handler"
       (http://httpd.apache.org/docs/mod/mod_mime.html#addhandler)
       Man kann definieren, daß Dateien mit z. B. bestimmten Endungen vom Webserver
       als CGI-Anwendungen interpretiert werden sollen. Dies kann auf bestimmte
       Verzeichnisbäume beschränkt sein, muß aber nicht. "Faule" Webmaster definieren
       so etwas für ihren gesamten Server (der frühere Provider des Self-Portals
       war ein solcher). Vorteil: Du kannst in einem CGI-Verzeichnis zwischen Anwendungen
       und deren Daten mischen. Nachteil: *Jetzt* kann man auf die Daten auch per Browser
       zugreifen, was möglicherweise nicht erwünscht ist (Passworte etc. !)

    Dein Problem wäre also durch eine entsprechende Konfiguration des Webservers
    vermeidbar, falls Du darauf Einfluß nehmen kannst.
    Vom Standpunkt der Wartbarkeit und Transparenz ziehe ich im allgemeinen Fall
    jedoch Methode a) eindeutig vor (worauf Klaus Mock sich bezogen hatte).

    Viele Grüße
          Michael