Загрузить файл 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.

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