Bilder per Python übergeben

Sockets, TCP/IP, (XML-)RPC und ähnliche Themen gehören in dieses Forum
Tafkadasom2k5
User
Beiträge: 24
Registriert: Dienstag 25. Juli 2006, 09:32

Dienstag 25. Juli 2006, 10:27

Hallöchen!
Die Suchfunktion habe ich bereits konsultiert, aber so wirklich helfen wollen mir die dort gefundenen Beiträge nicht.

Es geht um eine kleine "Bildübergabe", um sozusagen dem Nutzer den echten Pfad der Datei zu "verschweigen" und um unter Umständen jede Datei noch zu "Markieren", aber so weit bin ich noch nicht ;)

Um den gedebggten Code anzusehen, hier der Link:
http://www.schudak.de/cgi-bin/Marc_Gies ... omImage.py

Code: Alles auswählen

#!/usr/bin/python
##!D:\Programme\xampp\xampp\python\python.exe

# CGI-Module importieren
import cgitb; cgitb.enable() 
import cgi

######--Settings--#############################
sUrl = "http://www.schudak.de/"
sUrlPictures = sUrl + "Marc_Giesmann/images/"
###############################################

# Browser sagen, dass da ein Bild kommt
print "Content-Type: image/gif;"

# http://www.schudak.de/Marc_Giesmann/images/haken.gif; Existiert also wirklich!
sCurrentImage = sUrlPictures + "haken.gif"
hPicture = open(sCurrentImage,"rb")
inhalt   = hPicture.read()
hPicture.close

print inhalt
Ich bin da leider ein wenig überfragt, vielleicht kann mir da ja jemand helfen... Warum findet er das Bild nicht? Der Link in der "sCurrentImage"-Variable, der ja auch gedebuggt wird, lässt sich ohne Weiteres im Browser öffnen.

In hope of help, :arrow:
Tafkadasom2k5
Ich kam, ich sah, und ich ging einfach wieder...

Gott: "Nietzsche ist tot"
Benutzeravatar
DatenMetzgerX
User
Beiträge: 398
Registriert: Freitag 28. April 2006, 06:28
Wohnort: Zürich Seebach (CH)

Dienstag 25. Juli 2006, 11:01

Villeicht keine Rechte. Bah...


sUrlPictures = "./Marc_Giesmann/images/"

ändere das mal so ;) Achtung das Script muss dann im Main-Ordner liegen

../ ein verzeichnis höher
./ dieses Verzeichnis
Tafkadasom2k5
User
Beiträge: 24
Registriert: Dienstag 25. Juli 2006, 09:32

Dienstag 25. Juli 2006, 11:07

Hi!
Thx erstmal, aber das wars nicht...

Code: Alles auswählen

sUrlPictures = "../../Marc_Giesmann/images/"
Jetzt kackt er so RICHTIG ab ;)
Nichtmal der Debugger kommt mehr durch, nur noch der Internal Server-Error...

//Edit: Ich habe 2 mal "../" geschrieben, weil im Main-Order nur Dateien übermittelt und nicht ausgeführt werden... //

Die Berechtigungen sind alle vollständig gegeben...

Gr33tz
Tafkadasom2k5

P.S.:
DatenMetzgerX hat geschrieben: [...] Bah...
Was meinst du damit?Wegen den "vollständigen Pfadangaben"? Das war ja auch nur, weils mit den Punkten nicht klappte. Ich bin mir ausserdem recht sicher, dass auf dem Testserver Unix o.Ä. läuft!
Ich kam, ich sah, und ich ging einfach wieder...

Gott: "Nietzsche ist tot"
BlackJack

Dienstag 25. Juli 2006, 11:43

Also bei dem Link gibt's die Fehlermeldung, dass es die Datei mit dem Namen `http://www.schudak.de/Marc_Giesmann/images/haken.gif` nicht gibt. Das ist ja wohl auch nachvollziebar.

Ansonsten ist die Frage wie die Verzeichnislandschaft für Dein Skript aussieht, wenn es als CGI läuft. Geh ruhig mal davon aus, das CGI Skripte in ein chroot-jail gesteckt werden können.
Tafkadasom2k5
User
Beiträge: 24
Registriert: Dienstag 25. Juli 2006, 09:32

Dienstag 25. Juli 2006, 11:54

Ja, aber geb den Link mal direkt in deinen Browser ein, und du wirst sehen...
Eine .gif-Datei.

Also sie scheint zu existieren.

Wie die Umgebung aussieht,lässt sich ja anhand des Links auf den du geklickt hast sehen.
Oder reden wir gerade aneinander vorbei?

Wenn ich übrigends die .gif-Datei in das "/CGI-BIN/Marc_Giesmann/"-Verzeichnis verschiebe, so bekomme ich die gleiche Fehlermeldung, und beim Testen des Pfades logischerweise einen kompletten internal Server Error...
Ich kam, ich sah, und ich ging einfach wieder...

Gott: "Nietzsche ist tot"
Leonidas
Administrator
Beiträge: 16024
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Dienstag 25. Juli 2006, 14:49

Tafkadasom2k5 hat geschrieben:Ja, aber geb den Link mal direkt in deinen Browser ein, und du wirst sehen...
Eine .gif-Datei.
Ja, aber open() öffnet lokale Dateien, nicht Dateien die per HTTP erreichbar sind. Deswegen musst du dort den Pfad zu deiner Datei auf dem Server angeben. Versuchs doch mal den Pfad hartzucoden und dann gegebenfalls im error.log schauen was schiefgelaufen ist.
My god, it's full of CARs! | Leonidasvoice vs Modvoice
Tafkadasom2k5
User
Beiträge: 24
Registriert: Dienstag 25. Juli 2006, 09:32

Dienstag 25. Juli 2006, 15:12

Leonidas hat geschrieben:[...]Versuchs doch mal den Pfad hartzucoden und dann gegebenfalls im error.log schauen was schiefgelaufen ist.
...Kay, klingt einleuchtend.
Nur was ist das ;)

Sorry, bin noch recht neu auf dem Gebiet :oops:

Gr33tz
Tafkadasom2k5
Ich kam, ich sah, und ich ging einfach wieder...

Gott: "Nietzsche ist tot"
Leonidas
Administrator
Beiträge: 16024
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Dienstag 25. Juli 2006, 15:22

Statt open(sCurrentImage,"rb") machst du file("/var/www/pfad/zu/deinem/bild.png", "rb") und testest das, obs geht.
My god, it's full of CARs! | Leonidasvoice vs Modvoice
Tafkadasom2k5
User
Beiträge: 24
Registriert: Dienstag 25. Juli 2006, 09:32

Dienstag 25. Juli 2006, 15:33

...ähm ja, also sozusagen den Pfad, nur ohne "http://schudak.de" ?
Oder eher "../../Marc_Giesmann/images/haken.gif" ?
Ich kam, ich sah, und ich ging einfach wieder...

Gott: "Nietzsche ist tot"
Leonidas
Administrator
Beiträge: 16024
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Dienstag 25. Juli 2006, 15:53

Tafkadasom2k5 hat geschrieben:...ähm ja, also sozusagen den Pfad, nur ohne "http://schudak.de" ?
Oder eher "../../Marc_Giesmann/images/haken.gif" ?
Nein, gemeint sit der der absulute Pafd im Dateisystem auf dem Server, nicht die URL des Bildes.

Du öffnest Dateien ja auch mit Pfaden wie C:\datei.txt und nicht mit http://meinrechner.de/C/datei.txt, oder?
My god, it's full of CARs! | Leonidasvoice vs Modvoice
Tafkadasom2k5
User
Beiträge: 24
Registriert: Dienstag 25. Juli 2006, 09:32

Dienstag 25. Juli 2006, 16:10

Leonidas hat geschrieben:Du öffnest Dateien ja auch mit Pfaden wie C:\datei.txt und nicht mit http://meinrechner.de/C/datei.txt, oder?
Da liegt glaube ich ein kleines Problem: Ich bin kein Root. Und das ist ein (für mich) unbekannter Webserver. Das heißt, ich muss mit Python-Befehlen irgendwie den Pfad rausbekommen.

Aber irgendwie finde ich kein "this.os.path.dirname" oder sowas in der Art.

Da kommen leider wieder die Probleme des schweren Anfangs zum Vorschein..

Hätte da jemand eine Idee für mich?

Gr33tz
Tafkadasom2k5
Ich kam, ich sah, und ich ging einfach wieder...

Gott: "Nietzsche ist tot"
Leonidas
Administrator
Beiträge: 16024
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Dienstag 25. Juli 2006, 16:42

Tafkadasom2k5 hat geschrieben:Aber irgendwie finde ich kein "this.os.path.dirname" oder sowas in der Art.
Versuch mal os.getcwd() und __file__ anzuzeigen. Dann kannst du versuchen, aus diesen Angaben den Pfad deiner Bilder zu ermitteln.
My god, it's full of CARs! | Leonidasvoice vs Modvoice
Benutzeravatar
HWK
User
Beiträge: 1295
Registriert: Mittwoch 7. Juni 2006, 20:44

Dienstag 25. Juli 2006, 20:33

Wie wäre es denn, wenn Du die Datei mit urlopen aus urllib2 öffnest?

Code: Alles auswählen

hPicture = urllib2.urlopen(sCurrentImage)
Leonidas
Administrator
Beiträge: 16024
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Dienstag 25. Juli 2006, 20:56

HWK hat geschrieben:Wie wäre es denn, wenn Du die Datei mit urlopen aus urllib2 öffnest?
Das ist doch unschön, dass ein Server erstmal ein Bild von sich selbst über den Umweg HTTP runterlädt und damit der User es nochmal per HTTP runterlädt.
My god, it's full of CARs! | Leonidasvoice vs Modvoice
Tafkadasom2k5
User
Beiträge: 24
Registriert: Dienstag 25. Juli 2006, 09:32

Mittwoch 26. Juli 2006, 07:32

Okay. Also folgendes habe ich jetzt herausgefunden:
Die CGI-Befindet sich in dem Ordner

http://schudak.de/cgi-bin/Marc_Giesmann/
und laut os.getcwd() ind
/mnt/am2/07/688/00000006/htdocs/cgi-bin/Marc_Giesmann

Das Bild befindet sich in
http://schudak.de/Marc_Giesmann/images
also theoretisch in
/mnt/am2/07/688/00000006/htdocs/Marc_Giesmann/images
oder seh ich das falsch?

Also folgender

Code: Alles auswählen

#!/usr/bin/python
##!D:\Programme\xampp\xampp\python\python.exe

# CGI-Module importieren
import cgitb; cgitb.enable()
import cgi 
            
######--Settings--#############################
sUrl = "/mnt/am2/07/688/00000006/htdocs/"
sUrlPictures = sUrl + "Marc_Giesmann/images/"
###############################################
            
# Browser sagen, dass da ein Bild kommt
print "Content-Type: image/gif;"
            
# http://www.schudak.de/Marc_Giesmann/images/haken.gif; Existiert also wirklich!
sCurrentImage = sUrlPictures + "haken.gif"
hPicture = open(sCurrentImage,"rb")
inhalt   = hPicture.read()
hPicture.close
            
print inhalt
Jetzt bekomme ich nur noch einen internal Server Error.
Das klingt so, als ob ich irgendwie in einem Dir-Jail sitze oder so.
Speichere ich die Datei aber direkt im cgi-bin/Marc_Giesmann, so passiert genauso wenig.

:?:
Ich kam, ich sah, und ich ging einfach wieder...

Gott: "Nietzsche ist tot"
Antworten