xNeTworKx: Noch immer Probleme mit Datei

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);

  1. 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

    1. 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 =(

      1. 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

        1. 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.

          1. 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

  2. Sup!

    Ich sagte system("mv $posting $neues_posting") - geht aber nur unter richtigen Betriebssystemen ;-)

    Gruesse,

    Bio

  3. 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

    1. Hi,
      ok danke, es hat mit rename "messages/$posting","$messages/$neues_posting" geklappt. Wie gesagt, ich hab leider die richtige Synthax nicht gekannt :-)

      1. 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!