Von cgi-bin Ordner auslesen, der NICHT im cgi-bin liegt..??
Mike
- cgi
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
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
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