Да, вы можете сделать это на чистом PHP!
Я только что выпустил 2 новые библиотеки для таких вещей в FTP / SFTP
Рекурсивное копирование файлов и папок на удаленном SFTP-сервере (если local_path заканчивается содержимым папки с косой чертой, в противном случае загружается сама папка)
Ftp::upload_dir($server, $user, $password, $local_path, $remote_path, $port = 22);
Загрузить каталог с удаленного FTP-сервера (если с remote_dir заканчивается косая чертасодержимое папки, в противном случае загрузите саму папку)
Ftp::download_dir($server, $user, $password, $remote_dir, $local_dir,
$ port = 22);
Если вы захотите взглянуть на код, вы увидите рекурсивные функции, которые совершают чудеса;)