FTP にてサーバーのファイルのタイムスタンプを設定する方法

タグの編集
投稿者 N88-Basic  (社会人) 投稿日時 2020/7/6 23:54:11
Windows 10 Home(64) Ver 2004 + Visual Studio 2019 にてFtp 関連のアプリを作成していますが、ファイルをアップロードした場合にサーバー上のファイルのタイムスタンプがアップロードした日付となってしまいます。おそらくサーバーは UNIX 系だと思うのですがかなり前に少し触っただけで、タイムスタンプ(最終書き込み日時)の変更などはまったく気にしていませんでした(データはホームページ関連ファイルです)。

現在は、Upload したファイルの日付を取得して、Windows 上のファイルのタイムスタンプを合わせる様に設定したり、ファイルと日付をデータベース上に記録したりしているのですが、Windows 上でのバックアップなどで不要なバックアップ処理が発生しないか不安に思っております。

サーバー上のファイルスタンプを設定する方法をご存じでしたらご教授ください。


投稿者 (削除されました)  () 投稿日時 2020/7/7 11:17:45
(削除されました)
投稿者 魔界の仮面弁士  (社会人) 投稿日時 2020/7/7 12:31:07
> おそらくサーバーは UNIX 系だと思うのですが
サーバーの OS や FTP デーモンの具体的な情報があった方が調べやすいかと思います。
FTP デーモンのソフトウェア名やバージョンを確認することはできますか?
コマンド プロンプトから『ftp server.example.com』で繋いでみると、FTP サーバーの情報が得られるかも。


> サーバー上のファイルのタイムスタンプがアップロードした日付となってしまいます
ファイルシステムの更新日時と、FTP の更新日時は異なりますので、ご注意ください。

前者は通常、ローカル時刻で管理されますが、後者は世界標準時で管理されます。
(世界標準時に +9 時間したものが、日本標準時(JST)となります)
FTP クライアントによっては、この時差を考慮した時間に補正して表示してくれるものもありますね。

しかし、タイムスタンプを意図的に変更できるかどうかは実装依存となっています。

FTP 仕様としては、RFC 3659 の
 MDTM コマンド … 最終更新時間の詳細 (File Modification Time)
というのがあるのですが、これはあくまで取得用。

提案段階としては、いわゆる MF 系コマンドとして
 MFMT コマンド … 更新時刻の変更 (Modify Fact: Modification Time)
 MFCT コマンド … 作成時刻の変更 (Modify Fact: Creation Time)
などが挙がっていたのですが、正式仕様に盛り込まれるには至っていないと思います。
https://www.ietf.org/archive/id/draft-somers-ftp-mfxx-04.txt
https://tools.ietf.org/id/draft-somers-ftp-mfxx-01.txt


まずはお使いのサーバーが MFMT コマンドをサポートするかどうかを確認してみてください。
(サポートしているコマンドの一覧は、FEAT あるいは HELP コマンドで調べられます)

FTP が更新日時の変更をサポートしていない場合には、次策として
FTP 以外のアップロード手段についても検討してみてください。
たとえば WebDAV をサポートしているサーバーならば、
PROPPATCH で getlastmodified を指定できるかもしれません。
投稿者 (削除されました)  () 投稿日時 2020/7/7 16:10:04
(削除されました)
投稿者 魔界の仮面弁士  (社会人) 投稿日時 2020/7/7 16:11:58
> まずはお使いのサーバーが MFMT コマンドをサポートするかどうかを確認してみてください。
FTP クライアントによっては、MFMT の送出に対応している物もあるので、
開発前に、そういったソフトで動作チェックしては如何でしょう。
http://www.koikikukan.com/archives/2012/10/01-000300.php

なお、FTP や FTPS ではなく、別のプロトコルである
SFTP (SSH File Transfer Protocol) であれば、
ローカル側のタイムスタンプを引き継げるかと思います。
投稿者 N88-BASIC  (社会人) 投稿日時 2020/7/9 10:59:03
魔界の仮面弁士 さん、ご丁寧な説明をありがとうございます。

ご案内に従って調査すると私の契約しているサーバーは MFMT コマンドはサポートされていませんでした、また、ターゲットはバイト先の契約しているレンタルサーバーではまだチェックしていませんが、デバッグが困難ですので別の方法を検討します。

また、不正確でしょうが、ファイルサイズ(サーバー上のサイズとクライアントのサイズはまだ比較していません)と得られるファイル日付とアップロード実行日時(my.settings.***)などで、うまくできないか検討します。

今後ともよろしくお願いします。