Seite 1 von 1

Bilder per Python übergeben

Verfasst: Dienstag 25. Juli 2006, 10:27
von Tafkadasom2k5
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

Verfasst: Dienstag 25. Juli 2006, 11:01
von DatenMetzgerX
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

Verfasst: Dienstag 25. Juli 2006, 11:07
von Tafkadasom2k5
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!

Verfasst: Dienstag 25. Juli 2006, 11:43
von BlackJack
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.

Verfasst: Dienstag 25. Juli 2006, 11:54
von Tafkadasom2k5
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...

Verfasst: Dienstag 25. Juli 2006, 14:49
von Leonidas
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.

Verfasst: Dienstag 25. Juli 2006, 15:12
von Tafkadasom2k5
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

Verfasst: Dienstag 25. Juli 2006, 15:22
von Leonidas
Statt open(sCurrentImage,"rb") machst du file("/var/www/pfad/zu/deinem/bild.png", "rb") und testest das, obs geht.

Verfasst: Dienstag 25. Juli 2006, 15:33
von Tafkadasom2k5
...ähm ja, also sozusagen den Pfad, nur ohne "http://schudak.de" ?
Oder eher "../../Marc_Giesmann/images/haken.gif" ?

Verfasst: Dienstag 25. Juli 2006, 15:53
von Leonidas
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?

Verfasst: Dienstag 25. Juli 2006, 16:10
von Tafkadasom2k5
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

Verfasst: Dienstag 25. Juli 2006, 16:42
von Leonidas
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.

Verfasst: Dienstag 25. Juli 2006, 20:33
von HWK
Wie wäre es denn, wenn Du die Datei mit urlopen aus urllib2 öffnest?

Code: Alles auswählen

hPicture = urllib2.urlopen(sCurrentImage)

Verfasst: Dienstag 25. Juli 2006, 20:56
von Leonidas
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.

Verfasst: Mittwoch 26. Juli 2006, 07:32
von Tafkadasom2k5
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.

:?:

Verfasst: Freitag 28. Juli 2006, 07:52
von Tafkadasom2k5
Komisch, bei mir funktioniert wirklich nichts.

Auch wenn ich das Bild im gleichen Ordner habe und es öffne, bekomme ich trotz cgitb-lib nur einen Internal-Server-Error.
Schreibe ich den Dateinamen falsch (angebSOT.jpg anstatt angebot.jpg), dann bekomme ich eine Fehlermeldung, ansonsten nur einen spärlichen "Internal Server Error"...

Auch das Bild hat bei mir "alle Rechte bekommen", also wirklich alle.

Ausserdem tritt der Fehler bei .jpg wie auch .bmp-Dateien auf.

Ich habe wirklich alles probiert, auch das

Code: Alles auswählen

os.chdir(os.path.split(__file__)[0])
wie in einem anderen Thread beschrieben hilft wirklich überhaupt nicht..

HILFE..! :cry:

Verfasst: Freitag 28. Juli 2006, 09:39
von BlackJack
Was sagt denn das Log des Webservers zu so einem Fehlgeschlagenen Zugriff?

Verfasst: Freitag 28. Juli 2006, 13:15
von Tafkadasom2k5
BlackJack hat geschrieben:Was sagt denn das Log des Webservers zu so einem Fehlgeschlagenen Zugriff?
Ehrlich gesagt finde ich diesen nicht...

Ich bin nur "Unteruser" dieses Servers, habe daher also auch keine Root-Rechte....

Gr33tz
Tafkadasom2k5

Verfasst: Freitag 28. Juli 2006, 22:32
von BlackJack
Dann wird die Fehlersuche schwierig bis unmöglich.