Я хочу управлять файлами в реализации 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
@Оливье Я изменил код Curl на одну строку и запустил его в Windows 11. Получил сообщение < was unexpected at this time.
Попробуйте без части --data
, я думаю это необязательно.
Curl.exe 'cd.wedos.com/remote.php/dav/files/wedos-auth-anonymized' --user username:pass --request PROPFIND' возвращает Curl: (3) URL-адрес отклонен: номер порта был не десятичное число от 0 до 65535
Уберите кавычки: curl.exe https://cd.wedos.com/remote.php/dav/files/wedos-auth-anonymized ...
ух ты. Я получил возвращенный XML-файл, содержащий все файлы и каталоги в корневой папке. Теперь я хочу знать, как указать, какую папку я хочу перечислить и, что более важно, сделать в PHP.
Попробуйте добавить путь к папке к URL-адресу.
это работает. Идеальный. Думаю, я могу использовать cURL в PHP вместо клиента Sabre. Это не совсем то, что я хотел, но... должно сработать. Хотите создать ответ на основе вашего первоначального комментария и нашего разговора? Если мне никто не поможет с саблей, я приму это.
Попробуйте $client->propfind('path/to/folder', ['{DAV:}displayname'], 1);
Передайте 1
в depth
(третий) аргумент propfind
:
$folder_content = $client->propfind('', [], 1);
Протокол WebDAV распознает три уровня глубины:
PROPFIND
это означает, что возвращаются только свойства папки/файла
Я бы попробовал этот тест с завитком.