Как передать файл, полученный с FTP, без локального сохранения?

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

Я создаю локальный временный файл, я загружаю файл FTP во временный файл, и когда он заканчивается, я отправляю его с ответом файла Symfony HTTP:

$tempPath = tempnam(sys_get_temp_dir(), 'ftp');

$tempFile = fopen($tempPath, 'a+');

$log = "myLog";
$pass = "myPwd";

$conn_id = ftp_connect('my.ftp.server');
$ftp_login = ftp_login($conn_id, $log, $pass);

ftp_fget($conn_id, $tempFile, $path, FTP_ASCII, 0);
ftp_close($conn_id);

fclose($tempFile);

return $app->sendFile($tempPath, 200, array('Content-Type' => 'application/force-download', 'Content-disposition' => "attachment; filename=myFile.zip"));

Это работает, но я бы сделал лучше (обеспечить удаление временных файлов, повысить производительность, …)

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

Чтобы получить его, я думаю, что мне нужно подключиться ftp_fget() функция (или другая функция FTP) для функции PHP, которая может выводить ее в php://output или стандартный вывод (я действительно не знаю эту область PHP).

Я нахожу readfile() функция, но она принимает имя файла в качестве аргумента, а не как ресурс ftp_fget() необходимость… Есть ли другая функция, совместимая с fget_fget или другим способом сделать это?

0

Решение

Ваша проблема состоит из двух частей:

  1. Чтение файла FTP в виде потока (см. Пример с fread(): «PHP: Как мне прочитать файл .txt с FTP-сервера в переменную?«)

  2. Потоковый ответ в Symfony2

1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]