9

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

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

4

4 回答 4

12

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

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

于 2010-07-27T02:05:56.617 回答
0

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

例子:

date_default_timezone_set("CET");

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

于 2015-09-09T05:37:25.737 回答
0

我最近遇到了同样的问题。我的方法是在根目录中创建一个名为 /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;
}
于 2015-11-03T11:39:00.153 回答
0

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

于 2018-12-07T11:49:48.940 回答