Horst Nogajski: per FTP den Zeitstempel einer Datei setzen?

Hallo zusammen,

kann man per FTP den Zeitstempel einer Datei definieren?

Wenn, dann geht das vermutlich mit dem per ftp_site oder ftp_exec , oder?

Wenn ja, welche Parameter und in welcher Form muß man mitgeben?

Viele Grüße,
Horst

  1. Holladiewaldfee,

    Wenn, dann geht das vermutlich mit dem per ftp_site oder ftp_exec , oder?

    Oder ftp_raw, das wurde extra auf meinen Wunsch eingebaut ;)
    Aber prinzipiell sollte es mit ftp_site gehen. Dann mußt Du nur noch dem FTP-Server beibringen, das entsprechende Programm auszuführen. Die Parameter mußt Du dann so setzen, wie sie das auszuführende Programm auch akzeptiert. Dafür ist "site" ja da.

    Ciao,

    Harry

    --
      Die ideale Zeit für Firntouren:
      http://harry.ilo.de/projekte/berge/
    1. Hallo Harry,

      Oder ftp_raw, das wurde extra auf meinen Wunsch eingebaut ;)

      Die Funktion wird bei mir gar nicht unterstützt (PHP 4.3.4 Win),
      (vielleicht liegt 's ja daran das ich als Horst angemeldet bin und nicht als Harry, ;-) )

      Aber prinzipiell sollte es mit ftp_site gehen.

      Hm, ich hab's probiert, bekomme aber leider nur Warnungen:

      Warning:  ftp_site() [function.ftp-site.html]: 'SITE TOUCH' not understood. in d:\webserver\vh\dev\_php\ftp\ftptest.php on line 72

      Warning:  ftp_exec() [function.ftp-exec.html]: 'SITE EXEC' not understood. in d:\webserver\vh\dev\_php\ftp\ftptest.php on line 73

      Dann mußt Du nur noch dem FTP-Server beibringen, das entsprechende Programm auszuführen. Die Parameter mußt Du dann so setzen, wie sie das auszuführende Programm auch akzeptiert.

      Mmhhhm, jaha, ehm: ich kenne mich mit Unix-Rechnern nicht aus, ich habe es mit folgenden Definitionen für den touch-Befehl probiert:

      $STAMP = FTP_FILE_STAMP(LOCALROOT.$FILE);
       //$cmd = "touch -c -m -t $STAMP $FILE";
       $cmd = "touch $FILE";
       ftp_site($ftpstream,$cmd);
       ftp_exec($ftpstream,$cmd);

      touch: -c = keine leere Datei erzeugen falls $FILE nicht existiert
       -m = nur das Modifikations-Datum ändern, (wobei das LastAccess-Datum sowieso _immer_ geändert wird, dann aber auf den aktuellen Zeitstempel)
       -t = Benutze einen Zeitstempel im Format MMDDhhmm

      Da es aber nicht funktioniert hat weiß ich jetzt weder ob der touch-Befehl richtig war und/oder das Zeitstempel-Format usw.

      Sehr wahrscheinlich kann/darf man nicht besonders viele Befehle per FTP auf einem Server ausführen. (So würde ich es auf jedenfall machen wenn ich teil-öffentliche Server anbieten würde, ;-)).  Deshalb habe ich mich ja auch hier ans Forum gewand, weil ich dachte jemand kennt evtl. einen Befehl dafür der auch allgemein per SITE-Befehl akzeptiert ist.

      Naja, im schlimmsten Fall speichere ich in einer lokalen Datei die Timestamps der Dateien auf dem FTP-Server und vergleiche diese dann beim nächsten Scriptaufruf mit den dann vorliegenden Timestamps. Dann weiß ich auch ob die Files auf dem Server geändert wurden.
      Allerdings erscheint mir die Methode mit dem synchronisierten Zeitstempel eleganter.

      Viele Grüße,
      Horst

      1. Holladiewaldfee,

        Oder ftp_raw, das wurde extra auf meinen Wunsch eingebaut ;)

        Die Funktion wird bei mir gar nicht unterstützt (PHP 4.3.4 Win),
        (vielleicht liegt 's ja daran das ich als Horst angemeldet bin und nicht als Harry, ;-) )

        Ne, es liegt daran, daß Du kein 5er PHP ausm CVS hast ;)
        http://de.php.net/manual/en/function.ftp-raw.php

        Hm, ich hab's probiert, bekomme aber leider nur Warnungen:

        Ja klar, weil der Server ja nicht weiß, daß er das Zeug ausführen darf. Gaaanz früher bei irgendeinem 0815-FTP-Server (Name vergessen), hat es gereicht, wenn man die entsprechende Datei in das /bin/-Verzeichnis unterhalb des FTP-Roots kopiert hat.

        Mmhhhm, jaha, ehm: ich kenne mich mit Unix-Rechnern nicht aus, ich habe es mit folgenden Definitionen für den touch-Befehl probiert:

        [...]

        Da es aber nicht funktioniert hat weiß ich jetzt weder ob der touch-Befehl richtig war und/oder das Zeitstempel-Format usw.

        Keine Ahnung, aber so wie ich das sehe hat der FTP-Server den Befehl mangels Kenntnis / Erlaubnis einfach nicht ausgeführt.

        Sehr wahrscheinlich kann/darf man nicht besonders viele Befehle per FTP auf einem Server ausführen. (So würde ich es auf jedenfall machen wenn ich teil-öffentliche Server anbieten würde, ;-)).  Deshalb habe ich mich ja auch hier ans Forum gewand, weil ich dachte jemand kennt evtl. einen Befehl dafür der auch allgemein per SITE-Befehl akzeptiert ist.

        Ich hab mich mal ein bißchen umgeschaut. Es scheint durchaus FTP-Server zu geben, die "SITE TOUCH" verstehen. Wie man allerdings einem anderen FTP-Server das beibringt - ein Rätsel. Im Fall ProFTPd würde ich auf mod_site tippen, dessen Dokumentation sich aber leider auf "FIXMEFIXMEFIXME" beschränkt ...

        Ciao,

        Harry

        --
          Die ideale Zeit für Firntouren:
          http://harry.ilo.de/projekte/berge/
  2. kann man per FTP den Zeitstempel einer Datei definieren?

    siehe auch

    http://www.nsftools.com/tips/RawFTP.htm

    ausgehend von der Liste gibt es FTP_seitig keine Möglichkeit direkt den Timestamp zu manipulieren
    ...dann auch wahrscheinlich nicht für PHP...

    so wie ich das verstehen, ist der Timestamp jeweils von der letzten Änderung der Datei ausgehend

    ergo

    müßte man wohl

    entweder die Datei direkt auf dem Server zum Laufzeitpunkt ändern
    (z.B.: 2 mal rename ?, das Letzte rename erzeugt die alte Datei)

    oder die Datei "downloaden", "on the fly" verändern und "uploaden"

    ....

    MfG
    Micha

    1. Holladiewaldfee,

      http://www.nsftools.com/tips/RawFTP.htm

      ausgehend von der Liste gibt es FTP_seitig keine Möglichkeit direkt den Timestamp zu manipulieren

      Doch. Ausgehend von dieser Liste gibt es nämlich auch keine Möglichkeit, die Berechtigungen für eine Datei per CHMOD zu ändern.
      All diese Dinge verstecken sich jedoch hinter dem etwas unscheinbaren SITE-Kommando (z.B. "SITE CHMOD 644 blubb.html"). So müßte es prinzipiell auch eine Möglichkeit geben, ein "SITE TOUCH ..." auszuführen. Das Problem liegt wie gesagt daran, dem FTP-Server klar zu machen, daß er dieses Kommando ausführen darf.

      Ciao,

      Harry

      --
        Die ideale Zeit für Firntouren:
        http://harry.ilo.de/projekte/berge/
      1. eigentlich sind chmod und touch UNIX Befehle

        hmm was kommt denn heraus wenn du site touch --help
        laufen läßt

        1. Holladiewaldfee,

          eigentlich sind chmod und touch UNIX Befehle

          Das ist mir klar. Das site-Kommando dient ja auch dazu, genau solche Befehle, die im FTP-Protokoll eigentlich nicht vorgesehen sind, auszuführen.

          hmm was kommt denn heraus wenn du site touch --help
          laufen läßt

          Nichts. Denn der Server weiß immer noch nicht, daß er "touch" ausführen kann / darf. Würde es funktionieren, so sollte dasselbe rauskommen, wie wenn Du auf der Kommandozeile "touch --help" eingibst.

          Ciao,

          Harry

          --
            Die ideale Zeit für Firntouren:
            http://harry.ilo.de/projekte/berge/