我正在使用 PHP 的 ftp_rawlist 函数来获取文件列表及其关联的最后修改日期/时间。出于我的目的,我需要知道上次修改日期/时间的时区(或偏移量)。单独的日期/时间对我来说毫无用处,因为我需要将它们转换为 UTC。
有没有办法弄清楚 FTP 服务器的时区设置是什么?
FTP 标准中没有定义远程服务器时区的方法。
如果您对 FTP 服务器具有写入权限,我想您可以上传文件,然后计算 FTP 报告的文件时间与本地报告的文件时间之间的差异。
尝试在 PHP 代码的开头定义您的时区。
例子:
date_default_timezone_set("CET");
对我来说,这个解决方案很有效,因为它会自动将服务器的时间从不同的时区转换为所需的时区。
我最近遇到了同样的问题。我的方法是在根目录中创建一个名为 /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;
}
好吧,FTP 协议没有明确提供本地时间。当写入权限可用时,您可以上传新文件并检查修改时间。没有写访问权限,您可以定期读取 FTP 目录并记录每个条目的修改时间。当修改时间发生变化时,您肯定会知道服务器的本地时间。大约 30 分钟的检查就足够了,当然是自动的 :)