【问题标题】:Preserving file modified timestamp if using ftp_put to upload to remote server如果使用 ftp_put 上传到远程服务器,则保留文件修改时间戳
【发布时间】:2020-05-04 21:30:57
【问题描述】:

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

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

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

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

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

【问题讨论】:

    标签: php ftp put


    【解决方案1】:

    我认为有两种可能性,如果 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));
    

    【讨论】:

    • 无论哪种方式,它都必须在“PUT”之后 – 您不能为尚不存在的文件设置时间戳。即使它已经存在,“PUT”也会用当前时间覆盖时间戳。
    • @MartinPrikryl 我找不到 MDTM 的好例子,但我确实看到它看起来是在 PUT 之前告诉服务器这一点的命令。
    • 感谢您的回复!我会尝试并就结果回复您。谢谢!
    【解决方案2】:

    感谢 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)); 
    };
    

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-06-14
    • 1970-01-01
    • 1970-01-01
    • 2019-01-10
    • 2016-11-04
    • 2016-11-16
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多