denkfehler!

Sockets, TCP/IP, (XML-)RPC und ähnliche Themen gehören in dieses Forum
Gast

Beitragvon Gast » Mittwoch 14. April 2004, 19:22

so, das mti ftp ging mir jetzt so auf die eier, dass ich mal was anderes probiert habe, spricht was gegen diese methode?

es klappt mal, dass es so ausgegben wird wie geplant. mal sehen was der upload für troubles mit sich bringt:

Code: Alles auswählen

#!/usr/local/bin/python

from seiten import AdminSeite
import  urllib2

content=urllib2.urlopen('http://diplomarbeit.weberanto.net/definition.htm').read()
admin=AdminSeite(content)
print admin


mfg

rolgal
Gast

Beitragvon Gast » Mittwoch 14. April 2004, 22:30

nochmal....

alles theoretisch kapiert. ich kann aber vom browser aus keine datei am server anlegen, weil ich einen permission denied bekomme!

wie soll ich auch rechte einer datei übergeben, die ja nicht angelegt werden kann, weil ich nicht darf :?:

mfg

rolgal
Benutzeravatar
Dookie
Python-Forum Veteran
Beiträge: 2010
Registriert: Freitag 11. Oktober 2002, 18:00
Wohnort: Salzburg
Kontaktdaten:

Beitragvon Dookie » Mittwoch 14. April 2004, 23:24

Das liegt aber nicht an den Rechten der Datei, sondern an den Rechten des Verzeichnisses.
Wenn das Verzeichnis die Rechte 0755 hat dann kannst Du mit cgi darin keine Dateien oder Verzeichnisse anlegen. Leider lassen sich die Rechte vom Wurzelverzeichnis bei einigen Providern auch nicht ändern. So musst Du ein Verzeichnis anlegen mit den Rechten 0777 und darin kannst Du mit dem Script dann Dateien und Unterverzeichnisse anlegen. Bei vielen Providern geht das nur im Verzeichnis cgi-bin.

Sicherheit hat halt ihren Preis.


Gruß

Dookie
Gast

Beitragvon Gast » Mittwoch 14. April 2004, 23:52

hi dookie!

soweit funktioniert es jetzt mal, die rechte konnte ich schon setzen, ich habe....ach egal.



Code: Alles auswählen

#!/usr/bin/env python

import cgi, ftplib, os, sys

form=cgi.FieldStorage()

content=form.getvalue('user_eingabe')

os.chdir(os.environ['DOCUMENT_ROOT'])
f=file('index6.htm','w')
f.write(content)
f.close()

ftp=ftplib.FTP('meinserver','meinuser','meinpasswort')
ftp.cwd('html/crossover/diplomarbeit')

ftp.storlines('STOR index6.htm',file('index6.htm','r'))
ftp.quit()


momentan wird das skript auf meinem lokalen server ausgeführt, d.h. er legt in /var/www/html ein fileobjekt an, das er dann per ftp überträgt. läuft es dann am richtigen server, dann legt er mir die datei zuerst auch im /html verzeichnis ab. d.h. ich habe die dann immer doppelt. geht das nicht eleganter?
Benutzeravatar
Dookie
Python-Forum Veteran
Beiträge: 2010
Registriert: Freitag 11. Oktober 2002, 18:00
Wohnort: Salzburg
Kontaktdaten:

Beitragvon Dookie » Donnerstag 15. April 2004, 00:30

Hi rolgal,

hmm, warum lädst du es erst wieder mit ftp hoch, du kannst ja Dateien über ein html-Formular mit der Methode post hochladen. das landet dann irgendwo im /tmp verzeichnis von wo aus es mit dem Script an die richtige Stelle kopiert wird.
Deine Lösung kommt mir irgendwie vor, wie: "Von hinten, durch die Brust, ins Auge".

Wenn du es aber mit der ftplib machen willst/musst, kannst du dir das Zwischenspeichern in eine Datei auch sparen. Dafür gibts das Modul StringIO

Code: Alles auswählen

#!/usr/bin/env python

import cgi, ftplib
from StringIO import StringIO

form=cgi.FieldStorage()

content=form.getvalue('user_eingabe')

ftp=ftplib.FTP('meinserver','meinuser','meinpasswort')
ftp.cwd('html/crossover/diplomarbeit')
ftp.storelines('STOR index6.htm',StringIO(content))
ftp.quit()

nicht getestet, sollte aber klappen.


Gruß

Dookie
Gast

Beitragvon Gast » Donnerstag 15. April 2004, 01:01

hi dookie!

mir ist ja das sowieso net koscha vorgekommen. wer hat mich denn zu der lösung hingeführt :D
ich habe mir das mit dem os.chdir und os.environ net aus dem hut gezaubert.

war aber trotzdem lehrreich, also ken vorwurf

du kannst ja Dateien über ein html-Formular mit der Methode post hochladen. das landet dann irgendwo im /tmp verzeichnis von wo aus es mit dem Script an die richtige Stelle kopiert wird.


und wie sieht das aus?

die nachstehende version leuchtet mir sehr ein und werde ich morgen ausprobieren

danke dir, :D
Gast

Beitragvon Gast » Donnerstag 15. April 2004, 10:01

hi dookie!

dein bsp. funktioniert klasse, nur falls es jmd. auf die schnelle probiert, es ist dir ein 'e' zu viel entwischt bei

Code: Alles auswählen

ftp.storelines('STOR index6.htm',StringIO(content))


muss heissen

Code: Alles auswählen

ftp.storlines('STOR index6.htm',StringIO(content))


die andere version kann ich mir nur theoretisch vorstellen, denn wenn ich das vom /tmp kopiere gibt sicher auch troubles mit den rechten, sonst könnte ja jeder auf irgendein serververzeichnis kopieren, aber vielleicht habe ich dich ja missverstanden.

jedenfalls dachte ich eine praktikable lösung ist nur mit ftp möglich.

nochwas: es gibt trotzdem das skript richtig arbeitet einen fehler
[Thu Apr 15 10:54:59 2004] [error] [client 127.0.0.1] Premature end of script headers: /var/www/cgi-bin/upload.py

finde ich seltsam, lässt man ihn noch irgendwas schreiben in den browser, dann tritt diese meldung nicht auf, ich finde das einfach seltsam

mfg

rolgal
Benutzeravatar
Dookie
Python-Forum Veteran
Beiträge: 2010
Registriert: Freitag 11. Oktober 2002, 18:00
Wohnort: Salzburg
Kontaktdaten:

Beitragvon Dookie » Donnerstag 15. April 2004, 12:47

Hi rolgal,

die Zeile war schlecht kopiert aus Deinem Beispiel ;)

das mit dem Fileupload via CGI-Script kenn ich von PHP aus. Sollte mit Python eigentlich auch so ähnlich gehen, da hab ich mich aber, mangels Webspace mit Pythonunterstützung noch nicht näher befasst.

Wenn Du das Script über den Browser aufrufst, erwartet dieser ein Ergebnis. Da das Script aber nichts zurückliefert (html-Seite) kommt die Fehlermeldung.

Schick als am Einfachsten eine simple html-Seite mit print an den Browser dann ist der error gegessen.


Gruß

Dookie
Gast

Beitragvon Gast » Donnerstag 15. April 2004, 13:38

hi

gut mir ist ein 'e' zuviel entwischt. :D


falls du mal webspace mit pyhonunterstüztung zu einem sauguten preis suchst:

http://www.speicherhosting.com

ich bin mehr und mehr damit zufrieden, haben sich gesteigert.


cgi upload:
ich kann mir ja das nur so vorstellen mit dem cgi upload. ich lese das formular aus, klar ist das jetzt irgendwo in /tmp. dann muss ich aber wieder ein fileobjekt anlegen und wenn die rechte des verzeichnisses stimmen, dann kann man es wohl dorthin kopieren. wenn die grundsätzliche überlegung stimmt, sehe ich keinen vorteil darin.


mfg

rolgal
Benutzeravatar
Dookie
Python-Forum Veteran
Beiträge: 2010
Registriert: Freitag 11. Oktober 2002, 18:00
Wohnort: Salzburg
Kontaktdaten:

Beitragvon Dookie » Donnerstag 15. April 2004, 15:11

Hi auch,

der Vorteil ist, daß nirgends dein ftp-passwort auftaucht im Script. Falls der Webserver mal verkonfiguriert wurde und er *.py als Text im Browser anzeigt oder es zum Download anbietet, ist auch Dein ftp-Passwort offen sichtbar. Darum ist der Upload mittels Webformular und dann kopieren aus /tmp bei php z.B. standartprozedere.


Gruß

Dookie
Gast

Beitragvon Gast » Donnerstag 15. April 2004, 15:55

hm

aber ich muss ein fileobjekt erzeugen, oder? geht vielleicht auch mit dem modul dass du mir gezeigt hast, oder?

das mit dem passwort ist ein schlagendes argument.

mfg

rolgal
Gast

Beitragvon Gast » Donnerstag 15. April 2004, 16:12

hi

also einfach so :D , funzte mal auf dem lokalen server:

Code: Alles auswählen

#!/usr/bin/env python

import cgi

form=cgi.FieldStorage()

content=form.getvalue('user_eingabe')

os.chdir('/var/www/html/crossover/diplomarbeit')
f=file('index8.htm','w')
f.write(content)
f.close()



dann noch irgendwas zur bestätigung, damit wir den error (premature....) nicht haben
Gast

Beitragvon Gast » Donnerstag 15. April 2004, 16:16

ich liebe das thema:-))

beim download, habe ich noch was geändert, ist wichtig weil sonst in der textarea die unter escape genannten zeichen nicht angezeigt werden:

Code: Alles auswählen

#!/usr/local/bin/python

from seiten import AdminSeite
import urllib2, cgi

content=urllib2.urlopen('http://diplomarbeit.weberanto.net/auswertungb.htm').read()
content=cgi.escape(content,['&','&','&','&','&'])
admin=AdminSeite(content)
print admin



wahrscheinlich gibt es noch andere zeichen auf die zu achten ist, die sind mir mal aufgefallen.
das forum kann die zeichen nicht darstellen es handelt sich um codierungen fuer umlaute usw.
Benutzeravatar
Dookie
Python-Forum Veteran
Beiträge: 2010
Registriert: Freitag 11. Oktober 2002, 18:00
Wohnort: Salzburg
Kontaktdaten:

Beitragvon Dookie » Donnerstag 15. April 2004, 16:38

der 2, Parameter bei cgi.escape ist aber nur ein Flag, das angibt ob Anführungszeichen auch als entities umgewandelt werden sollen.

Ansonst gibts auch noch das Modul htmlentitydefs, mit Dictionaries zur Umwandlung von entitiys von/in Unicode oder Latin1 Zeichen.

Beim Upload giebts auch die Möglichkeit eine Datei direkt von Deiner Festplatte mittels CGI upzuloaden, wie es bei vielen Photoalben der Fall ist, aber damit kann man auch Textdateien oder sonstwas hochladen.


Gruß

Dookie
Gast

Beitragvon Gast » Donnerstag 15. April 2004, 17:01

hm,...heisst ich brauche die nicht alle angeben?

wie auch immer, ich habe noch ein problem, irgendwo bleibt der prozess wohl stecken, es funktionier auch alles aber der server gibt immer wieder folgende meldung aus,

Code: Alles auswählen

[Thu Apr 15 17:09:57 2004] [error] [client 213.47.47.46] request failed: URI too long
[Thu Apr 15 17:16:24 2004] [error] [client 213.47.195.236] request failed: URI too long
[Thu Apr 15 17:19:10 2004] [error] [client 213.47.115.135] request failed: URI too long
[Thu Apr 15 17:22:47 2004] [error] [client 213.47.245.173] request failed: URI too long
[Thu Apr 15 17:35:18 2004] [notice] caught SIGTERM, shutting down
[Thu Apr 15 17:40:48 2004] [notice] Apache-AdvancedExtranetServer/1.3.26 (Mandrake Linux/6.3.90mdk) PHP/4.2.3 configured -- resuming normal operations
[Thu Apr 15 17:40:48 2004] [notice] Accept mutex: sysvsem (Default: sysvsem)
[Thu Apr 15 17:48:31 2004] [error] [client 213.47.195.236] request failed: URI too long
[Thu Apr 15 17:48:43 2004] [error] [client 213.47.20.142] request failed: URI too long
[Thu Apr 15 17:50:57 2004] [notice] caught SIGTERM, shutting down


zwischendurch habe ich ihn mal abgestellt, dann nachdem hochfahren hat er wieder denselben kummer.

irgendwer irgendeine idee, was das soll?

mfg

rolgal

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder