Dennis: Datei auf dem Server verschieben

Hi @all

ich bin gerade dabei, mir ein PHP-Gästebuch auf Textdate Basis zu schreiben.
Klappt auch alles wunderbar, jedoch bin ich jetzt bei meinem "Archiv" hängen
geblieben:
Man stelle sich von, ich habe einen Ordner A, der Ordner B und C als Unterordner
besitzt. Nun möchte ich mit einem Script in Ordner C, eine Datei aus dem
Ordner B nach C verschieben.

Gibt es da eine entsprechende Funktion für? Ich habe bei php.net nichts gefunden.

Oder müsste ich da die Datei rüberkopieren, und dann im Original löschen?
Ich dachte da schon mal an die Funktion copy, weiß aber leider nicht so richtig,
wie man sie verwendet, bzw. copy(Pfad Originaldatei, Zielpfad) tuts nicht.

Mein zweites Problem ist dann noch folgendes:
Für mein Archiv, möchte ich, dass in einer PHP-Datei alle vorhandenen Monate
(eine Textdatei == ein Monat) aufgelistet werden.

Wie mache ich das am geschicktesten mit PHP?
Anbei bemerkt: Mir wäre es lieb, wenn nicht die Dateiname aufgelistet werden, sondern
die ersten vier Buchstaben des Names (Jahr), und dann soll die Monatszahl durch den
Monatsname ersetzt werden. Das wäre allerdings leicht zu lösen.

MfG, Dennis.

--
Hinweise:
Signatur 2 von 3:
Die EU und die neuen Mitgliedslnder:
http://www.riehle-web.com/pkprojekt/
Oder doch mehr in HTML interessiert?
http://tutorial.riehle-web.com
  1. Hallo Dennis,

    ... Nun möchte ich mit einem Script in Ordner C, eine Datei aus dem
    Ordner B nach C verschieben.

    Gibt es da eine entsprechende Funktion für? Ich habe bei php.net nichts gefunden.

    rename http://www.php.net/manual/de/function.rename.php

    Mein zweites Problem ist dann noch folgendes:
    Für mein Archiv, möchte ich, dass in einer PHP-Datei alle vorhandenen Monate
    (eine Textdatei == ein Monat) aufgelistet werden.

    $monat = array (
        'Januar',
        'Februar',
        'März',
        'April',
        'Mai',
        'Juni',
        'Juli',
        'August',
        'September',
        'Oktober',
        'November',
        'Dezember'
    );  // *scnr*

    Wie mache ich das am geschicktesten mit PHP?

    Geht bestimmt auch komplizierter :-)

    Du möchtest allerdings eher aus der Liste der vorhandenen Dateien ermitteln, für welche Monate Textdateien existieren?

    Initialisiere ein Array mit Einträgen für jeden Monat mit dem Wert false für jeden Eintrag
    Für alle Dateien in Deinem Verzeichnis
      Ermittle den Monatsanteil des Dateinamens
      Setze einen entsprechenden Arrayeintrag von false auf true
    Nächste Datei

    Freundliche Grüsse,

    Vinzenz

    1. Hi Vinzenz

      Gibt es da eine entsprechende Funktion für? Ich habe bei php.net nichts gefunden.
      rename http://www.php.net/manual/de/function.rename.php

      $quelle = '../admin/2004_03.txt';
      $ziel = '2004/2004_03.txt';
      if(file_exists($quelle)) {
       if(rename($quelle, $ziel)) {
        echo "Kopiert.";
       }
      }
      => Klappt nicht! Warnmeldung:
      Warning: rename(../admin/2004_03.txt,2004/2004_03.txt) [function.rename]: No such file or directory in C:\_TPP_Engine\_base\apache_files\www\s4.cybton.com\gaestebuch\archiv\index.php on line 28

      Du möchtest allerdings eher aus der Liste der vorhandenen Dateien ermitteln, für welche Monate Textdateien existieren?

      Richtig.

      Initialisiere ein Array mit Einträgen für jeden Monat mit dem Wert false für jeden Eintrag
      Für alle Dateien in Deinem Verzeichnis
        Ermittle den Monatsanteil des Dateinamens
        Setze einen entsprechenden Arrayeintrag von false auf true
      Nächste Datei

      Da bin ich jetzt nicht ganz mitgekommen. Wie meinst du das?
      Kannst du mir da mal noch etwas Code geben?

      Bitte bedenke, dass es auch verschiedene Jahre gibt, also z.B. geht es um:
      2003_05.txt
      2003_06.txt
      [...]
      2004_04.txt

      MfG, Dennis.

      --
      Hinweise:
      Signatur 3 von 3:
      Fragen zu Formularen?
      http://tutorial.riehle-web.com hilft!
      1. Hallo Dennis,

        $quelle = '../admin/2004_03.txt';
        $ziel = '2004/2004_03.txt';

        Relative Pfade sind mit Vorsicht zu geniessen, sie sind relativ zum Skript.
        Ich bevorzuge für meine Nutzdaten ein Datenverzeichnis ausserhalb der document-root und ausserhalb des Skriptbereiches.

        if(file_exists($quelle)) {
        if(rename($quelle, $ziel)) {
          echo "Kopiert.";
        }
        }
        => Klappt nicht! Warnmeldung:
        Warning: rename(../admin/2004_03.txt,2004/2004_03.txt) [function.rename]: No such file or directory in C:\_TPP_Engine\_base\apache_files\www\s4.cybton.com\gaestebuch\archiv\index.php on line 28

        Sieht eigentlich gut aus, macht bei mir
            Fedora Linux Core 2
            Apache 2.0.49
            PHP 4.3.4
        (Standardkonfiguration der Installation) was es soll.

        Unter Windows kann dies eventuell an fehlenden Löschrechten für die Datei liegen. Darf apache die Datei löschen?

        Initialisiere ein Array mit Einträgen für jeden Monat mit dem Wert false für jeden Eintrag
        Für alle Dateien in Deinem Verzeichnis

        Siehe Beispiel bei http://www.php.net/manual/de/function.readdir.php

        Ermittle den Monatsanteil des Dateinamens

        mit substr() http://de.php.net/manual/de/function.substr.php

        Setze einen entsprechenden Arrayeintrag von false auf true

        $monate[$akt_monat] = true;

        Nächste Datei

        Da bin ich jetzt nicht ganz mitgekommen. Wie meinst du das?
        Kannst du mir da mal noch etwas Code geben?

        Siehe oben :-)

        Bitte bedenke, dass es auch verschiedene Jahre gibt, also z.B. geht es um:
        2003_05.txt
        2003_06.txt
        [...]
        2004_04.txt

        Möchtest Du für jedes Jahr eine entsprechende Übersicht?
        Dann arbeite mit zweidimensionalen Arrays.
        Extrahiere Jahr und Monat aus dem Dateinamen. Damit hast Du die Indizes Deines zweidimensionalen Arrays.

        Freundliche Grüsse,

        Vinzenz

        1. Hi Vinzenz

          Relative Pfade sind mit Vorsicht zu geniessen, sie sind relativ zum Skript.
          Ich bevorzuge für meine Nutzdaten ein Datenverzeichnis ausserhalb der document-root und ausserhalb des Skriptbereiches.

          Hm, wie soll ich es sonst machen? Außerhalt der document-root heißt wahrscheinlich in einem nicht öffentlichen Verzeichnis? Auf so eins hab ich leider keinen Zugriff.
          Oder soll ich den Pfad vom Server-Root angeben? also von _ganz_ am Anfang an?

          Warnmeldung:
          Warning: rename(../admin/2004_03.txt,2004/2004_03.txt) [function.rename]: No such file or directory in C:\_TPP_Engine\_base\apache_files\www\s4.cybton.com\gaestebuch\archiv\index.php on line 28

          Das spräche ja für das oben, er sagt ja im Prinzip, dass er in index.php keine Textdatei findet.

          Unter Windows kann dies eventuell an fehlenden Löschrechten für die Datei liegen. Darf apache die Datei löschen?

          Da bin ich mir jetzt nicht so ganz sicher, wie bzw. wo stellt man das denn ein?
          Btw: Mit der Function Copy tuts es auch nicht, und da wird ja nichts gelöscht. Achso, und mit unlink Dateien zu löschen geht.

          Siehe Beispiel bei http://www.php.net/manual/de/function.readdir.php

          Gibt die function denn auch die Unterverzeichnisse aus, oder nur die Dateien? Welche Funkction gibt auch oder nur Unterverzeichnisse aus?

          Möchtest Du für jedes Jahr eine entsprechende Übersicht?

          Joa, das wäre nicht schlecht.

          Dann arbeite mit zweidimensionalen Arrays.
          Extrahiere Jahr und Monat aus dem Dateinamen. Damit hast Du die Indizes Deines zweidimensionalen Arrays.

          Ich werds versuchen .... aber erst mogen *gähn*

          MfG, Dennis.

          --
          Hinweise:
          Signatur 2 von 3:
          Die EU und die neuen Mitgliedslnder:
          http://www.riehle-web.com/pkprojekt/
          Oder doch mehr in HTML interessiert?
          http://tutorial.riehle-web.com
          1. Hi,

            Ich bevorzuge für meine Nutzdaten ein Datenverzeichnis ausserhalb der document-root und ausserhalb des Skriptbereiches.
            Hm, wie soll ich es sonst machen? Außerhalt der document-root heißt wahrscheinlich in einem nicht öffentlichen Verzeichnis? Auf so eins hab ich leider keinen Zugriff.

            Relativ geht schon - wenn Du weißt, wo Du bist. ;-)

            Ich hätte ansonsten noch eine Funktion anzubieten, die relative in absolute Pfade umwandelt (und meckert, wenn man das für einen Pfad macht, für den man es nicht machen darf). So kann man auch leicht einen relativen User-Pfad ...

            Oder soll ich den Pfad vom Server-Root angeben? also von _ganz_ am Anfang an?

            ... in einen absoluten Server-Pfad umwandeln.

            Warnmeldung:
            Warning: rename(../admin/2004_03.txt,2004/2004_03.txt)

            Erstellt rename() eigentlich auch selbst den ggf. fehlenden Pfad?

            Ansonsten hätte ich noch eine Funktion anzubieten, die einen nicht existenten Pfad erstmal herstellt. Das wäre zumindest für ...

            Btw: Mit der Function Copy tuts es auch nicht, und da wird ja nichts gelöscht. Achso, und mit unlink Dateien zu löschen geht.

            ... diese Variante sehr sinnvoll. ;-)

            Gruß, Cybaer

            PS: Funktionen bei Bedarf voraussichtlich Montag (oder wann auch immer ich wieder hier bin ... ;-))

            --
            Hinweis an Fragesteller: Fremde haben ihre Freizeit geopfert, um Dir zu helfen. Helfe Du auch im Archiv Suchenden: Beende deinen Thread mit einem "Hat geholfen" oder "Hat nicht geholfen"!
            1. Hi Cybaer

              Ich hätte ansonsten noch eine Funktion anzubieten, die relative in absolute Pfade umwandelt (und meckert, wenn man das für einen Pfad macht, für den man es nicht machen darf). So kann man auch leicht einen relativen User-Pfad in einen absoluten Server-Pfad umwandeln.

              Und die da wäre?

              Erstellt rename() eigentlich auch selbst den ggf. fehlenden Pfad?

              Gute Idee, ich habe es gerade mal ausprobiert.
              Einmal schien es so, also hätte er einen Ornder erzeugt - Weitere Tests ergabe jedoch, dass dies vermutlich nicht so ist...

              Ansonsten hätte ich noch eine Funktion anzubieten, die einen nicht existenten Pfad erstmal herstellt.

              Die da wäre? *g*
              Ich will ja nur den Ordner erstellen, keine Datei.

              Btw: Mit der Function Copy tuts es auch nicht, und da wird ja nichts gelöscht. Achso, und mit unlink Dateien zu löschen geht.

              MfG, Dennis.

              --
              Hinweise:
              Signatur 2 von 3:
              Die EU und die neuen Mitgliedslnder:
              http://www.riehle-web.com/pkprojekt/
              Oder doch mehr in HTML interessiert?
              http://tutorial.riehle-web.com
              1. Hi Dennis

                Habs jetzt hingekriegt.
                Danke nochmal an alle
                und EOT.

                MfG, Dennis.

                --
                Hinweise:
                Signatur 1 von 3:
                Meine Homepage: http://www.riehle-web.com
                Tutorial: http://tutorial.riehle-web.com