Как получить информацию chmod через FTP

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

Я попробовал функцию fileperms() в PHP, но она не поддерживает протокол FTP, предназначенный только для использования с локальными файлами на сервере, к которому вы обращаетесь.

ftp_rawlist() вернет эту информацию

user10051234 30.04.2019 03:30
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
1
1
166
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Если вы используете PHP 7.2 и новее, а ваш FTP-сервер поддерживает команду MLSD, это легко сделать, так как вы можете использовать ftp_mlsd функция.

$conn_id = ftp_connect("ftp.example.com") or die("Cannot connect");
ftp_login($conn_id, "username", "password") or die("Cannot login");
ftp_pasv($conn_id, true) or die("Cannot change to passive mode");
$entries = ftp_mlsd($conn_id, "/remote/path") or die("Cannot list directory");

foreach ($entries as $entry)
{
    if (($entry["type"] != "cdir") && ($entry["type"] != "pdir"))
    {
        echo $entry["name"] . " - " . $entry["UNIX.mode"] . "\n";
    }
}

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

Следующий код предполагает общий формат *nix.

$entries = ftp_rawlist($conn_id, "/remote/path") or die("Cannot list directory");

foreach ($entries as $entry)
{
    $tokens = explode(" ", $entry);
    $name = $tokens[count($tokens) - 1];
    $permissions = $tokens[0];
    echo $name . " - " . $permissions . "\n";
}

Другие вопросы по теме