Отдать файл на скачивание по ссылке на другой ресурс
имеется ссылка на видео на другом сайте. Необходимо отдать на скачивание видео, не скачивая его к себе на сервер. Так возможно?
Ответы (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;