Загрузить файл FTP на клиент с помощью Readfile()
Я создаю веб-интерфейс управления файлами для наших клиентов, где я пытаюсь упростить загрузку с удаленного (FTP) сервера на клиент без предварительной загрузки на локальный веб-сервер.
Я нашел это Readfile()
делает именно то, что нужно, отлично работает как для загрузки через Интернет, так и с общедоступных FTP-серверов. Проблема в том, что при указании учетных данных через URL-адрес FTP он, очевидно, больше не работает. Я нашел другие сообщения об этом в Интернете, но пока нет решений или обходных путей.
$file_url = 'ftp://username:password@198.2.148.130/198.2.148.130%20port%2025665/server.properties';
header('Content-Type: application/octet-stream');
header("Content-Transfer-Encoding: Binary");
header("Content-disposition: attachment; filename=\"" . basename($file_url) . "\"");
readfile($file_url);
Существуют ли какие-либо обходные методы, которые бы заставили это работать так, как ожидалось? Я озадачен тем, как это можно исправить, когда это кажется ошибкой, а не ограничением.
1 ответ
URL-кодированные пробелы (%20
) в URL кажется виновником.
Просто используйте буквенные пробелы:
$file_url = 'ftp://username:password@198.2.148.130/198.2.148.130 port 25665/server.properties';
Совершенно верно указывать учетные данные таким образом в PHP FTP-упаковщике URL.