PHP ftp_mdtm () не поддерживается сервером? - PullRequest
1 голос
/ 21 августа 2009

Есть ли другие решения, кроме ftp_mdtm() для получения даты / времени изменения файла с использованием функций FTP?

Ответы [ 2 ]

3 голосов
/ 29 августа 2012

Формат вывода списка FTP не был стандартизирован для синтаксического анализа компьютера, поэтому, если вы хотите поддерживать все возможные серверы FTP, вам нужно придумать собственный синтаксический анализатор.

Но давайте начнем с самого простого способа: PHP поддерживает FTP-упаковщик . Начиная с PHP 5.1, вы можете использовать filemtime() для получения файла модификации удаленного файла, используя ftp://user:password@host/path/file в качестве аргумента.

Вы также можете попробовать использовать curl_getinfo() расширения PHP cURL.

Если это не сработает из-за того, что ваш FTP-сервер имеет AIX, VMS, EBCDIC или другую «экзотическую» природу, вы можете проанализировать список каталогов вручную.

Прежде всего, если вам очень повезло, FTP-сервер поддерживает команду MLST или MLSD. Вы можете выдать их, используя ftp_raw() в PHP. Вывод объясняется в RFC 3659 . Дата может быть легко проанализирована и возвращается в UTC.

Если вам повезло меньше, вам нужно вернуться к устаревшей команде LIST, используемой ftp_rawlist(). Не существует стандарта на то, как выглядит вывод, поэтому вам нужна эвристика. FileZilla очень хорош в работе с устаревшими FTP-серверами. Если вам действительно нужен анализатор и у вас есть какое-то время, просто перенесите синтаксический анализатор каталогов FileZilla на PHP.

0 голосов
/ 21 августа 2009

Начиная с PHP 5.1, вы можете просто использовать filemtime() с допустимым ftp://... путем к файлу.

Пример:

$user = 'peter';
$password = 'secret123';
$mtime = filemtime("ftp://$user:$password@example.com/some_file.txt");
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...