Как отличить файлы и папки на FTP-сервере - PullRequest
2 голосов
/ 03 марта 2010

Я хочу перечислить все файлы на FTP-сервере, используя PHP. Согласно RFC 959 команде FTP LIST разрешено печатать произвольную читаемую человеком информацию о файлах / папках, что делает невозможным правильное определение типа файла. Но как другим FTP-клиентам удается различать файлы и папки? Есть неписаный стандарт или такой?

Ответы [ 4 ]

1 голос
/ 03 марта 2010

Я наконец-то нашел расширение протокола FTP, которое реализует желаемое поведение: команда называется MLSD и может быть найдена на странице 23 RFC 3659 . Я буду использовать это по умолчанию и попытаюсь проанализировать вывод LIST, как если бы он был возвращен ls -l как запасной вариант.

0 голосов
/ 03 марта 2010

вы можете использовать ftp_rawlist () . получить элементы, которые начинаются с "d" (означает каталог), например

$ftp_server="someserver";
$ftp_user_name="someuser";
$ftp_user_pass="somepassword";
$conn_id = ftp_connect($ftp_server);
$login_result = ftp_login($conn_id, $ftp_user_name, $ftp_user_pass);
if ((!$conn_id) || (!$login_result)) {
    echo "FTP connection has failed!";
    echo "Attempted to connect to $ftp_server for user $ftp_user_name";
    exit;
} else {
    echo "Connected to $ftp_server, for user $ftp_user_name";
    $buff = ftp_rawlist($conn_id, '/');
    $dirs = preg_grep("/^d/",$buff);
    print_r($dirs);

}
0 голосов
/ 03 марта 2010

почему бы не сделать CD для файла / пути? если возникает ошибка, это файл.

0 голосов
/ 03 марта 2010

Я думаю, многое зависит от FTP-сервера. FTP-серверы в моем колледже выводят команду "ls" в следующем формате:

drwxr-xr-x    2 5609     1510         1896 Oct 31  2007 practice
-rw-r--r--    1 5609     1510          646 Feb 08  2009 prgrm1.c

, который ясно показывает, что практика - это каталог, а prgrm1.c - это файл.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...