Отдать файл на скачивание по ссылке на другой ресурс

имеется ссылка на видео на другом сайте. Необходимо отдать на скачивание видео, не скачивая его к себе на сервер. Так возможно?


Ответы (1 шт):

Автор решения: UKRman

Можно помещать контент файла стороннего ресурса во временный файл который по окончанию скрипта умрет, или после закрытия к примеру:

// Link на файл на стороннем ресурсе который нужно скачать
$link = 'https://website.com/folder/file.png|mp4|...';

// Достаем с него расширение и названия
['basename' => $basename, 'extension' => $extension] = pathinfo($link);

// Достаем сам контент по силке
$content = file_get_contents($link);
// Получаем путь ко временному файлу который умрет по окончанию выполнения скрипта
['uri' => $filepath] = stream_get_meta_data(tmpfile());

// Сохраняем контент с ресурса во временный файл
file_put_contents($filepath, $content);

// сбрасываем буфер вывода PHP, чтобы избежать переполнения памяти выделенной под скрипт
// если этого не сделать файл будет читаться в память полностью!
if (ob_get_level()) {
    ob_end_clean();
}

// заставляем браузер показать окно сохранения файла
header('Content-Description: File Transfer');
header('Content-Type: application/octet-stream');
header('Content-Disposition: attachment; filename=' . $basename);
header('Content-Transfer-Encoding: binary');
header('Expires: 0');
header('Cache-Control: must-revalidate');
header('Pragma: public');
header('Content-Length: ' . filesize($filepath));
// читаем файл и отправляем его пользователю
readfile($filepath);
exit;

→ Ссылка