Datei anlegen per cgi
Jörg Wittemeier
Hallo !
Ich will eine neue Datei auf dem Server mit einem PERL-Script anlegen.
Aus selfhtml:
open(NEUIGKEITENDATEI, ">news.txt");
close(NEUIGKEITENDATEI);
mit dem Hinweis, wenn Datei nicht vorhanden,
wird eine neue angelegt.
Genau das soll geschehen, geschieht aber nicht !
Hier mein kompletter Code:
#! /usr/bin/perl
######################
######################
$dataurl="http://luenenweb.de/kino/";
######################
##################################################
##################################################
read(STDIN, $buffer, $ENV{'CONTENT_LENGTH'});
@pairs = split(/&/, $buffer);
foreach $pair (@pairs)
{
($name, $value) = split(/=/, $pair);
#diff. div.
$value =~ tr/+/ /;
$value =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg;
$value =~ s/<!--(.|\n)*-->//g;
$FORM{$name} = $value;
}
######################
print "Content-type: text/html\n\n";
$FORM{von}=~ s/./_/g;
$dataurl=$dataurl.$FORM{von}.".txt";
open(DATAFILE, ">$dataurl") || die "error no 1771\n";
print DATAFILE "bingo";
close(DATAFILE);
Und anschließend stellt sich bei mir die Frage, wenn
es dann funzt, wie lösche ich
per cgi Dateien auf meinem Server ??
Kann mir jemand helfen??????????
Gruß
Jörg
Hallo Jörg
$dataurl="http://luenenweb.de/kino/";
$dataurl=$dataurl.$FORM{von}.".txt";
open(DATAFILE, ">$dataurl") || die "error no 1771\n";
print DATAFILE "bingo";
close(DATAFILE);
Das funktioniert deshalb nicht, weil man mit Dateibefehlen wie open() auf Betriebssystemebene arbeitet, nicht auf Netzebene. Du kannst mit open() also eine Datei oeffnen, aber keine URL.
Und anschließend stellt sich bei mir die Frage, wenn
es dann funzt, wie lösche ich
per cgi Dateien auf meinem Server ??
Mit unlink("[pfad/]datei.dat");
viele Gruesse
Stefan Muenz
Hallo Stefan !
$dataurl="http://luenenweb.de/kino/";
$dataurl=$dataurl.$FORM{von}.".txt";
open(DATAFILE, ">$dataurl") || die "error no 1771\n";
print DATAFILE "bingo";
close(DATAFILE);Das funktioniert deshalb nicht, weil man mit Dateibefehlen wie open() auf Betriebssystemebene arbeitet, nicht auf Netzebene. Du kannst mit open() also eine Datei oeffnen, aber keine URL.
------$dataurl muß natürlich "/servers/inter/sub/luenenweb/domain/www/kino/" heißen.
Sorry, die http:.... variante war ein letzter verzweifelter Versuch. Aber mit der internen Pfadangabe funzt es auch nicht. :-((
Und anschließend stellt sich bei mir die Frage, wenn
es dann funzt, wie lösche ich
per cgi Dateien auf meinem Server ??Mit unlink("[pfad/]datei.dat");
------- mit "/servers/inter/sub/luenenweb/domain/www/kino/data.txt"
als pfad funzt es auch nicht.
Vielen Dank
Jörg
Hi,
open(DATAFILE, ">$dataurl") || die "error no 1771\n";
print DATAFILE "bingo";
close(DATAFILE);
nimm doch mal das "die ..." weg, vielleicht klappt es dann. Die Wege von Perl sind unergründlich...
es dann funzt, wie lösche ich
per cgi Dateien auf meinem Server ??
Mit unlink("[pfad/]datei.dat");
------- mit "/servers/inter/sub/luenenweb/domain/www/kino/data.txt"
als pfad funzt es auch nicht.
Entweder stimmt der Pfad nicht (versuche einfach nur "data.txt"), oder Du kannst es mit system("rm [pfad/]datei.txt"); versuchen.
Cheatah
Hallo !!
open(DATAFILE, ">$dataurl") || die "error no 1771\n";
print DATAFILE "bingo";
close(DATAFILE);nimm doch mal das "die ..." weg, vielleicht klappt es dann. Die Wege von Perl sind unergründlich...
------habe "die....." nachträglich eingefügt um eventuell wenigstens eine Fehlermeldung zu bekommen.
Entweder stimmt der Pfad nicht (versuche einfach nur "data.txt"),
------Der Pfad stimmt, denn wenn die Datei vorhanden ist, schreibt das script artig "bingo" hinein, nur neu anlegen funtz nicht.
oder Du kannst es mit system("rm [pfad/]datei.txt"); versuchen.
------was heißt den rm????
Gruß und erstmal danke
Jörg
Hi,
------habe "die....." nachträglich eingefügt um eventuell wenigstens eine Fehlermeldung zu bekommen.
hm, schade. Klappt es denn, wenn Du nur ">datei.txt" schreibst, ohne Pfad?
------Der Pfad stimmt, denn wenn die Datei vorhanden ist, schreibt das script artig "bingo" hinein, nur neu anlegen funtz nicht.
Hast Du mal ">>$datei" versucht?
oder Du kannst es mit system("rm [pfad/]datei.txt"); versuchen.
------was heißt den rm????
Das ist der Linux-Befehl "remove", also "lösche". Du kannst mit system auch jeden anderen Betriebssystem-Befehl ausführen, wie z.B. "mkdir" (makedir) o.ä. Aber sei vorsichtig damit, schnell ist "rm -r /" ausgeführt, was ungefähr so viel wie "format c:" bedeutet... :-)
Cheatah
Hallo !
hm, schade. Klappt es denn, wenn Du nur ">datei.txt" schreibst, ohne Pfad?
---------klappt nicht :-((
Hast Du mal ">>$datei" versucht?
---------habe ich, klappt nicht :-((
Das ist der Linux-Befehl "remove", also "lösche". Du kannst mit system auch jeden anderen Betriebssystem-Befehl ausführen, wie z.B. "mkdir" (makedir) o.ä. Aber sei vorsichtig damit, schnell ist "rm -r /" ausgeführt, was ungefähr so viel wie "format c:" bedeutet... :-)
---------das ist mir zu hoch, da lasse ich lieber die finger web(g) :-))
Kann das ganze Problem nicht auch an der Server-Konfiguration liegen? rename... klappt auch nicht. ist doch komisch, weil so blöd kann ja selbst ich nicht sein. oder ?? :-))
grüsse
Jörg
hi!
hm, schade. Klappt es denn, wenn Du nur ">datei.txt" schreibst, ohne Pfad?
---------klappt nicht :-((
Hast du überhaupt Schreibrechte in dem Verzeichnis?
Versuch mal ein open (FILE, ">datei.txt" ) || die "Error #$!"; damit eine Fehlermeldung ausgegeben wird. Diese müsste dann in errors.log stehen und auf STDOUT ausgegeben werden.
bye, Frank!
Hi,
Kann das ganze Problem nicht auch an der Server-Konfiguration liegen?
hab ich auch schon überlegt, aber irgendwie kann ich mir keinen Grund vorstellen, warum ein Server so konfiguriert sein sollte... es sei denn, der Admin will seine Platten sauberhalten, und dann bist Du eindeutig beim falschen Provider!
rename... klappt auch nicht. ist doch komisch, weil so blöd kann ja selbst ich nicht sein. oder ?? :-))
Müßte "mv" ("move") heißen! Gilt sowohl zum Verschieben als auch zum Umbenennen...
Cheatah
Hallo !!
Habe Problem gelöst !!!!
Man sollte öfters den Provider fragen.
Seine kurze Antwort:
"Das Verzeichnis in dem die Datei angelegt werden soll, muß mit CHMOD 777 behandelt werden. Sonst funktioniert es nicht."
Und er hatte recht :-))))
Dank an alle für die Mühe
Gruß
Jörg
Hi,
"Das Verzeichnis in dem die Datei angelegt werden soll, muß mit CHMOD 777 behandelt werden. Sonst funktioniert es nicht."
hoppla, man sollte auch mal an die trivialen Dinge denken... chmod ist gewöhnlich das erste, was ich neu setze :-)
Trotzdem hätte ich nicht mit 777 gerechnet, eher mit 755, aber naja. Hauptsache es läuft!
Cheatah
hi!
"Das Verzeichnis in dem die Datei angelegt werden soll, muß mit CHMOD 777 behandelt
werden. Sonst funktioniert es nicht."
Dann hat der Provider seinen Webserver falsch konfiguriert. Die Verzeichnisse sollten dem Webserver gehören (chown). Also wäre 755 richtig: nur der Besitzer (= Webserver) darf schreiben, alle dürfen lesen und ausführen.
bye, Frank!
hi!
oder Du kannst es mit system("rm [pfad/]datei.txt"); versuchen.
------was heißt den rm????
Das ist der Linux-Befehl "remove", also "lösche". Aber sei vorsichtig damit, schnell ist "rm -r
/" ausgeführt, was ungefähr so viel wie "format c:" bedeutet... :-)
"rm -r /" bedeutet überhaupt nichts, solange kein Dateiname angegeben ist ;))
bye, Frank!
Hi,
"rm -r /" bedeutet überhaupt nichts, solange kein Dateiname angegeben ist ;))
oh ja, sorry... aber so hat es den Vorteil, daß man es ruhig mal ausprobieren kann *g* ;-)
Ich meinte das auch mehr, falls man zu viel mit system() programmiert und dem Benutzer dabei in irgendeiner Form Eingaben erlaubt (z.B. für Benutzer gewählte Verzeichnisnamen anlegen, und der neue Benutzer gibt "test|rm..." ein...), da sollte man vorsichtig sein!
Cheatah