【问题标题】:HOW TO GET: Time Zone Setting of FTP Server?如何获取:FTP 服务器的时区设置?
【发布时间】:2011-03-15 19:04:11
【问题描述】:

我正在使用 PHP 的 ftp_rawlist 函数来获取文件列表及其关联的最后修改日期/时间。出于我的目的,我需要知道上次修改日期/时间的时区(或偏移量)。单独的日期/时间对我来说毫无用处,因为我需要将它们转换为 UTC。

有没有办法弄清楚 FTP 服务器的时区设置是什么?

【问题讨论】:

标签: php ftp utc gmt


【解决方案1】:

FTP 标准中没有定义远程服务器时区的方法。

如果你对 FTP 服务器有写权限,我猜你可以上传文件,然后计算 FTP 报告的文件时间和本地报告的文件时间之间的差异。

【讨论】:

  • 我相信 Dreamweaver 使用了这种方法。
  • 该死的......这就是我要尝试的方法,但我希望会有更好的解决方案。谢谢。
  • 但是如果你想超级精确,这样你就无法获得夏令时的信息。
【解决方案2】:

我最近遇到了同样的问题。我的方法是在根目录中创建一个名为 /time 的文件夹,然后将其读回并检查文件夹的创建日期。然后我可以确定我的 ftp 客户端和服务器之间的时间差。希望这会有所帮助。

顺便说一句,我正在使用https://github.com/ArxOne/FTP

// Establish a fallback
var servertime = DateTime.Now;
try
{
    // query for the existance of a time folder
    var timefolder = ftpClient.ListEntries("/").FirstOrDefault(o => o.Name == "time");
    // delete it if found
    if (timefolder != null)
    {
        ftpClient.Delete("/time");
    }
    // if not found create one
    ftpClient.Mkd("/time");
    timefolder = ftpClient.ListEntries("/").FirstOrDefault(o => o.Name == "time");
    if (timefolder == null)
    {
        Logger.Fatal("Time check failed");
        return;
    }
    // now grab the time of the folder.
    servertime = timefolder.Date;
}
catch (Exception x)
{
    Logger.Fatal(x,"Time check fatal error");
    return;
}

【讨论】:

    【解决方案3】:

    嗯,FTP 协议没有明确提供本地时间。当写入权限可用时,您可以上传新文件并检查修改时间。没有写访问权限,您可以定期读取 FTP 目录并记录每个条目的修改时间。当修改时间发生变化时,您肯定会知道服务器的本地时间。大约 30 分钟的检查就足够了,当然是自动的 :)

    【讨论】:

      【解决方案4】:

      尝试在 PHP 代码的开头定义您的时区。

      例子:

      date_default_timezone_set("CET");
      

      对我来说,这个解决方案很有效,因为它会自动将服务器的时间从不同的时区转换为所需的时区。

      【讨论】:

        猜你喜欢
        • 2019-12-13
        • 1970-01-01
        • 2013-11-02
        • 1970-01-01
        • 1970-01-01
        • 2011-06-09
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多