Thread Werte in Datei schreiben (CGI-Formular) (84 answers)
Opened by fred0815 at 2013-12-23 10:21

Linuxer
 2023-03-06 00:36
#194751 #194751
User since
2006-01-27
3869 Artikel
HausmeisterIn

user image
Zum Vergleich zwischen Python und Perl:

Ich habe mit Python nicht wirklich Erfahrung. Aber gemäß der Dokus, die ich gefunden habe, sollte in Python ein Modus "w" auch dafür sorgen, dass die Datei vor dem Schreiben gelöscht wird. Auch bei meinen Tests passiert das genau so:

# test.txt
Code: (dl )
Hallo Welt;


# test.py
Code: (dl )
1
2
f = open("test.txt","w")
f.close()


Ausführung:

Code: (dl )
1
2
3
4
5
6
prompt $ echo "### test.txt"; cat test.txt; echo "### executing test.py"; python test.py; echo "### cat test.txt"; cat test.txt 
### test.txt
Hallo Welt.
### executing test.py
### cat test.txt
prompt $


Hier zeigt das abschließende cat test.txt, dass die Text-Datei auch über pythons Modus "w" geleert worden ist.

IMHO ist Pythons open(filename,'w') nicht wirklich anders als Perls open($handle,'>',$filename).
Beide öffnen eine Datei zum Schreiben und leeren dabei die angegebene zu schreibende Datei.


Zum nächsten:

CGI-Skripte müssen in der Regel einen Header rausschicken, bevor sie Daten schicken. Solch einen Header schickst Du auch nicht raus, sondern in Zeile 13 direkt die Client-IP. Das mag der Webserver nicht und liefert diese Fehlermeldung ("Malformed Header").

Im Programm-Ablauf muss bedacht werden, dass man den Header nicht mehr wechseln kann, wenn man ihn einmal ausgegeben hat. Das muss man im Programmablauf beachten, wann man welchen Header ausgeben will, muss oder sollte.

Ich würde solche Debug-Ausgaben eher über warn ausgeben lassen, sodass sie auf STDERR ausgegeben werden.
Diese Ausgaben sollten dann im Error_Log des Webservers nachzulesen sein.

Wenn Du also die Ausgabe von Zeile 13 ändern würdest auf
Code: (dl )
print $cgi->header('text/plain), $client_ip;


sollte die IP auch "normal" ausgegeben werden.

Bedenke aber, dass dann der Header bereits gesendet wurde, sodass der Header aus Zeile 43 nicht mehr wirken kann, sondern dann als auszugebender Inhalt gewertet würde.
meine Beiträge: I.d.R. alle Angaben ohne Gewähr und auf Linux abgestimmt!
Die Sprache heisst Perl, nicht PERL. - Bitte Crossposts als solche kenntlich machen!

View full thread Werte in Datei schreiben (CGI-Formular)