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

Php 如果使用ftp_put上传到远程服务器,则保留文件修改的时间戳,php,ftp,put,Php,Ftp,Put,我有一个php脚本,可以将文件从一个文件夹上传到远程ftp服务器。 它可以将文件上传到远程服务器。连接良好 但是,上载文件的文件修改时间戳始终是传输到远程服务器的时间。当我使用ftp_put上传到远程服务器时,有没有办法保留修改的时间?还是我需要一种不同的方法 下面是代码。连接很好,ftp_put完成了它的工作 foreach (glob("$path/Content/*.*") as $filename) { $contentupstate = ftp_put($connection,

我有一个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));
在表决前(我认为):

或在卖出期权后:

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

谢谢你给Abracadver的提示。经过一些测试和更多的研究,下面是对我有用的代码。我必须在
ftp\u-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)); 
};

无论哪种方式,它都必须在“PUT”之后–您不能设置尚未存在的文件的时间戳。即使它已经存在,“PUT”也会用当前时间覆盖时间戳。@MartinPrikryl我找不到MDTM的好例子,但我看到的那个例子看起来是在PUT之前告诉服务器这一点的命令。谢谢回复!我会尝试一下,然后再告诉你结果。谢谢
MDTM
用于检索文件时间戳。只有一些FTP服务器支持带有两个参数的非标准语法来设置时间戳。看见
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)); 
};