Как составить список файлов с помощью клиента PHP WebDAV?

Я хочу управлять файлами в реализации Nextcloud (cd.wedos.com). Я могу подключиться к серверу с помощью WinSCP и просматривать, загружать и загружать файлы. Я хочу сделать то же самое через PHP. Благодаря ТАК я могу подключиться к серверу WebDAV из моей Windows 11 — моей среды разработки.

Я искал, как использовать клиент Sabre WebDAV, но, несмотря на это, понятия не имею, как составлять список файлов.

$folder_content = $client->propfind('', []);

возвращает

array(5) {
  ["{DAV:}getlastmodified"]=>
  string(29) "Thu, 18 Jul 2024 20:04:28 GMT"
  ["{DAV:}resourcetype"]=>
  object(Sabre\DAV\Xml\Property\ResourceType)#14 (1) {
    ["value":protected]=>
    array(1) {
      [0]=>
      string(16) "{DAV:}collection"
    }
  }
  ["{DAV:}quota-used-bytes"]=>
  string(11) "11825361054"
  ["{DAV:}quota-available-bytes"]=>
  string(13) "3286709522274"
  ["{DAV:}getetag"]=>
  string(15) ""6699754ce26f9""
}

В официальном документе Sabre используется $client->propfind('collection', array(, но при сборе параметров выдается ошибка «Не найдено», вместо этого я использовал ''.

$client->propfind('', array(
    '{DAV:}displayname',
    '{DAV:}getcontentlength',
));

Это возвращает

array(1) {
  ["{DAV:}displayname"]=>
  string(47) "wedos-auth-modified-0f5f-4c87-99a2-modified"
}

Я понятия не имею, что это значит.

Я нашел другие примеры использования propfind

$folder_content = $client->propfind('', array(
    '{DAV:}getlastmodified',
    '{DAV:}getcontenttype',
 ));

Это дает мне результат

array(1) {
  ["{DAV:}getlastmodified"]=>
  string(29) "Thu, 18 Jul 2024 20:04:28 GMT"
}

В официальной документации есть раздел «Обнаружение возможностей WebDAV». Я думал, это поможет. Итак, я запустил это

$features = $client->options();

который возвращает то, что мне не помогает.

array(8) {
  [0]=>
  string(1) "1"
  [1]=>
  string(1) "3"
  [2]=>
  string(14) "extended-mkcol"
  [3]=>
  string(14) "access-control"
  [4]=>
  string(40) "calendarserver-principal-property-search"
  [5]=>
  string(25) "nextcloud-checksum-update"
  [6]=>
  string(18) "nc-calendar-search"
  [7]=>
  string(27) "nc-enable-birthday-calendar"
}

Есть ли кто-нибудь, кто может помочь мне составить список всех файлов и каталогов определенной папки?


Благодаря Оливье я смог составить список, используя

curl.exe https://cd.wedos.com/remote.php/dav/files/wedos-auth-anonymized/upload   --user username:password   --request PROPFIND

Это не совсем список каталогов через клиент Sabre WebDAV, но я думаю, это сработает... Надеюсь, я смогу использовать cURL и для загрузки и скачивания файлов.

Хотя я все еще предпочитаю использовать Sabre Client

Я бы попробовал этот тест с завитком.

Olivier 23.07.2024 10:08

@Оливье Я изменил код Curl на одну строку и запустил его в Windows 11. Получил сообщение < was unexpected at this time.

Radek 23.07.2024 10:22

Попробуйте без части --data, я думаю это необязательно.

Olivier 23.07.2024 10:27

Curl.exe 'cd.wedos.com/remote.php/dav/files/wedos-auth-anonymized' --user username:pass --request PROPFIND' возвращает Curl: (3) URL-адрес отклонен: номер порта был не десятичное число от 0 до 65535

Radek 23.07.2024 10:32

Уберите кавычки: curl.exe https://cd.wedos.com/remote.php/dav/files/wedos-auth-anonymi‌​zed ...

Olivier 23.07.2024 10:36

ух ты. Я получил возвращенный XML-файл, содержащий все файлы и каталоги в корневой папке. Теперь я хочу знать, как указать, какую папку я хочу перечислить и, что более важно, сделать в PHP.

Radek 23.07.2024 10:43

Попробуйте добавить путь к папке к URL-адресу.

Olivier 23.07.2024 10:46

это работает. Идеальный. Думаю, я могу использовать cURL в PHP вместо клиента Sabre. Это не совсем то, что я хотел, но... должно сработать. Хотите создать ответ на основе вашего первоначального комментария и нашего разговора? Если мне никто не поможет с саблей, я приму это.

Radek 23.07.2024 10:51

Попробуйте $client->propfind('path/to/folder', ['{DAV:}displayname'], 1);

Olivier 23.07.2024 11:05
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать 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
9
62
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

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

Передайте 1 в depth (третий) аргумент propfind:

$folder_content = $client->propfind('', [], 1);

Протокол WebDAV распознает три уровня глубины:

  • 0 – только элемент – с PROPFIND это означает, что возвращаются только свойства папки/файла
  • 1 – дочерние элементы – это то, что вам нужно
  • бесконечность – все элементы-потомки – рекурсивно

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

Похожие вопросы

Верны ли эти красноречивые определения отношений?
Как использовать строку в качестве ключа массива в php
Как скрыть определенные поля из быстрого редактирования продуктов администратора WooCommerce
Laravel, Laravel Blade, исключение ошибки генерации, неопределенная переменная $helper, когда я нажимаю вторую ссылку навигации по домашней странице
Laravel Carbon (Как рассчитать дату следующего платежа)
Клиент PHP webDav выдает ClientException: проблема с сертификатом SSL: невозможно получить сертификат локального эмитента
Создание пользовательской кнопки добавления в корзину для переменных продуктов с вариациями в WooCommerce
Как получить ответ от пользователя в боте Telegram php при попытке подтвердить регистрацию и криптографический платеж
Почему изображение с водяным знаком так сильно увеличивается в размере в WordPress?
Magento 2: переопределить файл .phtml в пользовательском модуле