如果使用 ftp_put 上传到远程服务器,则保留文件修改时间戳

Preserving file modified timestamp if using ftp_put to upload to remote server

我有一个 php 脚本,可以将文件从一个文件夹上传到远程 ftp 服务器。 将文件上传到远程服务器工作正常。连接很好。

但是,上传文件的文件修改时间戳总是传输到远程服务器的时间。当我使用ftp_put上传到远程服务器时,有什么办法可以保留修改的时间吗?或者我需要不同的方法吗?

下面是代码。连接正常,ftp_put 完成了它的工作。

foreach (glob("$path/Content/*.*") as $filename) {
    $contentupstate = ftp_put($connection, "Content/". basename($filename) , $filename, FTP_BINARY); 
};

只是想检查这是否可行,或者我们是否必须在远程服务器上执行某些操作。 感谢任何愿意提供帮助的人。

我认为有两种可能性,如果 FTP 服务器支持它们(未测试)。先获取格式正确的修改时间:

$time = date('YmdGis', file_mtime($filename));

在 PUT 之前(我认为):

$stat = ftp_raw($connection, "MDTM $time Content/". basename($filename));

或在 PUT 之后:

$stat = ftp_raw($connection, "SITE UTIME $time $time $time Content/". basename($filename));

感谢 AbraCadaver 的提示。经过一些测试和更多研究后,这是对我有用的代码。我必须在 ftp_put 之后执行此操作,然后使用 MFMT 而不是 MDTM,因为 MDTM 语法对我不起作用。它有效,感谢大家。

foreach (glob("$path/Content/*.*") as $filename) {
    $time = date('YmdGis', filemtime($filename));
    $contentupstate = ftp_put($connection, "Content/". basename($filename) , $filename, FTP_BINARY); 
    $filemodstate = ftp_raw($connection, "MFMT " . $time . " Content/". basename($filename)); 
};