Перечислите и загрузите кликнувший файл с FTP - PullRequest
0 голосов
/ 17 октября 2018

У меня есть FTP, и мне нужно перечислить все файлы на FTP в каталоге загрузки, и после нажатия на любой из перечисленных файлов он загрузит определенный файл с FTP.

Он перечислит мои файлы в каталоге загрузки, но когда япопробуйте скачать файл, чтобы он набрал мне "нет файла"

Мой код:

    // connect and login to FTP server
$ftp_server = "IP";
$ftp_conn = ftp_connect($ftp_server) or die("Could not connect to $ftp_server");
$login = ftp_login($ftp_conn, "name", "password");

// list all files in upload directory and with "a" download file from FTP
$target_dir = "uploads/";
$files = ftp_nlist($ftp_conn, $target_dir);
foreach($files as $file) {
    echo "<a href='$file' download>$file</a>";
    echo "<br>";
}

1 Ответ

0 голосов
/ 17 октября 2018

Ваша ссылка в сгенерированном теге <a> указывает на веб-сервер, на котором нет связанного файла.

Вам нужно сделать ссылку на скрипт PHP, присвоив ему имяфайла для скачивания.Затем сценарий загрузит файл с FTP-сервера и передаст загруженный файл обратно пользователю (в веб-браузер).

echo "<a href=\"download.php?file=".urlencode($file)."\">".htmlspecialchars($file)."</a>";

Очень тривиальная версия сценария download.php:

<?

header('Content-Type: application/octet-stream');

echo file_get_contents('ftp://username:password@ftp.example.com/path/' . $_GET["file"]);

Сценарий download.php использует Оболочки URL FTP .Если это не разрешено на вашем веб-сервере, вам придется пойти более сложным путем с функциями FTP.См. PHP: Как мне прочитать файл с FTP-сервера в переменную?


Хотя для действительно правильного решения вы должны предоставить некоторые заголовки HTTP, связанные с файлом, напримерContent-Length, Content-Type и Content-Disposition.

Также приведенный выше тривиальный пример сначала загружает весь файл с FTP-сервера на веб-сервер.И только тогда он начнет передавать его пользователю (веб-браузеру).Что является пустой тратой времени, а также памяти на веб-сервере.

Для лучшего решения см. Загрузка файла с помощью сценария PHP с FTP-сервера в браузер с заголовком Content-Length без сохранения файла навеб-сервер .

Вы также можете автоматически определить Content-Type, если все ваши файлы не относятся к одному типу.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...