per FTP den Zeitstempel einer Datei setzen?
Horst Nogajski
- php
0 Harry0 Horst Nogajski0 Harry
0 Michael - Hannover0 Harry
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
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
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
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
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
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
eigentlich sind chmod und touch UNIX Befehle
hmm was kommt denn heraus wenn du site touch --help
laufen läßt
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