КАК ПОЛУЧИТЬ: Настройка часового пояса FTP-сервера?

Я использую функцию PHP ftp_rawlist для получения списка файлов и связанной с ними даты/времени последнего изменения. Для моих целей мне нужно знать часовой пояс (или смещение) даты/времени последнего изменения. Одни только даты/время бесполезны для меня, так как мне нужно преобразовать их в UTC.

Можно ли как-то выяснить, что такое настройка часового пояса FTP-сервера?


person StackOverflowNewbie    schedule 14.07.2010    source источник
comment
попробуйте запустить его с помощью команды ftp_exec :) php.net/manual/en /function.ftp-exec.php   -  person Haim Evgi    schedule 14.07.2010
comment
Какую команду мне выполнить, чтобы получить настройку часового пояса?   -  person StackOverflowNewbie    schedule 14.07.2010


Ответы (4)


В стандарте FTP не определен способ определения часового пояса удаленного сервера.

Если у вас есть права на запись на FTP-сервер, я думаю, вы можете загрузить файл, а затем рассчитать разницу между временем файла, сообщаемым FTP, и локально.

person m1tk4    schedule 27.07.2010
comment
Я считаю, что Dreamweaver использует этот метод. - person Brad; 27.07.2010
comment
Черт... Это подход, который я собирался попробовать, но я надеялся, что будет лучшее решение. Спасибо. - person Evan Plaice; 25.11.2013
comment
Но таким образом вы не сможете получить информацию о переходе на летнее время, если хотите быть очень точным. - person gumik; 15.05.2014

Недавно у меня была такая же проблема. Мой подход состоял в том, чтобы создать папку в корне с именем /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;
}
person fielde    schedule 03.11.2015

Что ж, FTP-протокол не предоставляет локальное время явно. Когда доступ для записи доступен, вы можете загрузить новый файл и проверить время модификации. Без доступа для записи вы можете периодически читать каталог FTP и записывать время изменения каждой записи. Когда время модификации изменится, вы точно будете знать локальное время сервера. ~ 30-минутной проверки будет достаточно, автоматическая, конечно :)

person Victor Mironov    schedule 07.12.2018

Попробуйте определить свой часовой пояс в начале кода PHP.

Пример:

date_default_timezone_set("CET");

Для меня это решение сработало, поскольку оно автоматически преобразовывало время сервера из другого часового пояса в желаемое.

person fracasamax    schedule 09.09.2015