Noch immer Probleme mit Datei
xNeTworKx
- perl
0 Helge0 Bio0 Klaus Mock
Hallo,
Seit gestern sitz ich am Problem, daß ich eine Datei einfach umbenennen muss. Mein Posting ist aber in der Menge der anderen Postings scho ziemlich weit nach unten verschwunden, deswegen frag ich heute nochmal nach. Wie kann ich die Datei $posting in die Datei $neues_posting umbenennen ? Ich bekam gestern den Tip, daß es mit system($posting $neues_posting) klappen sollte, was es aber auch nicht tut. Ich bin grad dabei jetzt mal die ganzen Dateien einzulesen und bei Übereinstimmung umzubenennen, klappt aber auch nicht, da ich irgendwie nicht weis wie ich den Befehl rename einzusetzen habe. Ich bekomme keine Fehlermeldung, aber es tut sich einfach nichts. Die Datei wird einfach nicht umbenannt.
sub savereply {
$posting = $posting .'.txt';
my $unixzeit = time;
my $neues_posting = $unixzeit .'.txt';
if ($email eq "") {
$email = '----';
}
if ($hpadresse eq "" || $hpadresse eq 'http://') {
$hpadresse = '----';
}
open(DB,">>messages/$posting") or die "Cant open Database : $!\n";
flock DB, 2;
print DB "\n";
print DB "<reply>";
print DB "<zeit>$zeit</zeit>\n";
print DB "<topic>$topic</topic><name>$name</name><email>$email</email><hpadresse>$hpadresse</hpadresse>\n";
print DB "<text>$text</text>\n";
print DB "</reply>";
close DB;
# ab hier will ich umbenennen
opendir(MES,"messages") or die "An error occurred : $!\n";
while (my $datafile = readdir(MES)) {
if ($datafile =~ /$posting/) {
rename($posting, $neues_posting);
}
}
closedir(MES);
#umbenennen Ende
print $query->redirect($url);
hi,
Ich bekam gestern den Tip, daß es mit system($posting $neues_posting) klappen sollte, was es aber auch nicht tut.
noe, wenn schon mit system, dann system(mv $posting $neues_posting) -
wenn du auf einem linux/unix arbeitest. keine ahnung, wie sowas in
der windoof-shell heisst ...
# ab hier will ich umbenennen
opendir(MES,"messages") or die "An error occurred : $!\n";
while (my $datafile = readdir(MES)) {
if ($datafile =~ /$posting/) {
rename($posting, $neues_posting);
}
}
closedir(MES);
#umbenennen Ende
so auf den ersten blick sollte das klappen, aber um einem solchen
fehler auf die spur zu kommen, das script mit -w (#!/usr/bin/perl -w)
laufen lassen und das 'rename' mit einem 'warn' (oder, hehe,
einem 'die') versehen, etwa so:
rename($posting, $neues_posting) or warn "Konnte $posting nicht in $neues_posting umbenennen, weil: $!\n";
jetzt einen blick in die logfiles deines webservers geworfen, und
du hast den grund. ich tippe ja mal auf falsche zugriffsrechte ... ??
viele gruesse
helge
Hallo,
Ich bekam gestern den Tip, daß es mit system($posting $neues_posting) klappen sollte, was es aber auch nicht tut.
noe, wenn schon mit system, dann system(mv $posting $neues_posting) -
wenn du auf einem linux/unix arbeitest. keine ahnung, wie sowas in
der windoof-shell heisst ...
Es klappt weder lokal auf meinem Apache auf Windows ( Fehlermeldung wegen dem mv) noch auf meinem Webspace (Unix/linux), wobei ich jetzt eigentlich gar nicht weis wofür ich den system Befehl eigentlich brauche, da umbenennen doch mit rename folgen muss ?
# ab hier will ich umbenennen
opendir(MES,"messages") or die "An error occurred : $!\n";
while (my $datafile = readdir(MES)) {
if ($datafile =~ /$posting/) {
rename($posting, $neues_posting);
}
}
closedir(MES);
#umbenennen Ende
so auf den ersten blick sollte das klappen, aber um einem solchen
fehler auf die spur zu kommen, das script mit -w (#!/usr/bin/perl -w)
laufen lassen und das 'rename' mit einem 'warn' (oder, hehe,
einem 'die') versehen, etwa so:
Bei warn kommt leider auch keine Meldung oder dgl. Es tut sich einfach nix, Das mit den Rechten muss klappen, weil das Verzeichnis auf meinem Webspace 777 hat, und die Files ja nur von dem Script erzeugt wurden. Lokal beim Apache habe ich bis jetzt auch nie Schwierigkeiten gehabt beim den Rechten, und die Files werden auch hier nur vom Script erzeugt.
Zugriff zu Logfiles hab ich leider nicht =(
hi,
Es klappt weder lokal auf meinem Apache auf Windows ( Fehlermeldung wegen dem mv) noch auf meinem Webspace (Unix/linux), wobei ich jetzt eigentlich gar nicht weis wofür ich den system Befehl eigentlich brauche, da umbenennen doch mit rename folgen muss ?
na ja, 'mv' wird unter linux/unix benutzt, um eine datei (oder
verzeichnis) zu einer anderen zu 'moven': aka umbenennen.
ist aber egal, klaus mock hat (wie immer :-) ) recht, du
musst den pfad zu den umzubenennenden files mituebergeben,
also
rename("messages/$posting", "messages/$neues_posting");
dann klappt es.
Bei warn kommt leider auch keine Meldung oder dgl. Es tut sich einfach nix, Das mit den Rechten muss klappen, weil das Verzeichnis auf meinem Webspace 777 hat,
uh-oh ... das wurd ich aber aendern ... ;-)
und die Files ja nur von dem Script erzeugt wurden. Lokal beim Apache habe ich bis jetzt auch nie Schwierigkeiten gehabt beim den Rechten, und die Files werden auch hier nur vom Script erzeugt.
Zugriff zu Logfiles hab ich leider nicht =(
dann kannst du immer noch
use CGI::Carp qw(fatalsToBrowser);
benutzen, das liefert dir zumindest rudimentaere hinweise direkt
in den browser und du stehst nicht voellig in der wueste.
viele gruesse
helge
Hi,
die Ordner, wo ich Dateien erzeuge, müssen bei mir auf 777 sein, weil sonst die Dateien nicht erzeugt werden, ist das eigentlich eher unüblich ? Es geht nämlich leider wirklich nicht anders.
hi,
die Ordner, wo ich Dateien erzeuge, müssen bei mir auf 777 sein, weil sonst die Dateien nicht erzeugt werden, ist das eigentlich eher unüblich ? Es geht nämlich leider wirklich nicht anders.
das kommt darauf an,
a.) wem diese verzeichnisse gehoeren und
b.) ob und als welcher user der apache laeuft.
grundsaetzlich wuerde ich verzeichnissen immer nur die
allernoetigsten rechte einraeumen.
wie das auf deinem webspace ist, kann ich nicht sagen - probiers
einfach mal aus. unter umstaenden reicht ein 0700 aus, sonst
ein 0755 - wenn alles auf 0777 steht, kann _jeder_, der shell-zugang
auf dem server hat, nach belieben deine dateien aendern oder
loeschen.
und das waer ja nicht so gut ;-)
viele gruesse
helge
Sup!
Ich sagte system("mv $posting $neues_posting") - geht aber nur unter richtigen Betriebssystemen ;-)
Gruesse,
Bio
Hallo,
opendir(MES,"messages") or die "An error occurred : $!\n";
while (my $datafile = readdir(MES)) {
if ($datafile =~ /$posting/) {
rename($posting, $neues_posting);
}
}
closedir(MES);
$datafile ist wirklich nur der Name der Datei und nicht inklusive Pfad. Da aber die Datei im Ordner 'messages' steht müßte es eigentlich
rename("messages/$posting", "messages/$neues_posting");
heißen.
(Abgesehen davon, daß es nicht sichergestellt ist, in welchem Verzeichnis Dein Script wirklich arbeitet, wenn es vom Webserver aufgerufen wird)
Was eventuelle Fehlermeldungen betriff, so solltets Du jede Funktion, welche potentiell schiefgehen kann, auch dementsprechend behandeln, also eigentlich etwas wie
rename (....) or die "Das umbenenen der Datei hat nicht geklappt: $!\n";
Sonst wird es einfach nur nicht gemacht, ohne daß jemand etwas davon erfährt;-)
Grüße
Klaus
Hi,
ok danke, es hat mit rename "messages/$posting","$messages/$neues_posting" geklappt. Wie gesagt, ich hab leider die richtige Synthax nicht gekannt :-)
hi!
ok danke, es hat mit rename "messages/$posting","$messages/
$neues_posting" geklappt. Wie gesagt, ich hab leider die richtige
Synthax nicht gekannt :-)
Das hat nix mit Syntax (ohne h!) zu tun, sondern wenn überhaupt mit
Semantik. Und bitte keine Fremdwörter verwenden, deren Bedeutung man
nicht kennt... ;)
bye, Frank!