Php - Как принудительно загрузить файл?

Я хочу добавить функцию "Загрузить этот файл" под каждым видео на одном из моих сайтов. Мне нужно заставить пользователя загружать файл, а не просто ссылаться на него, так как это иногда начинает воспроизводить файл в браузере. Проблема в том, что видеофайлы хранятся на отдельном сервере.

В любом случае, я могу заставить загрузку в PHP?

Ответы

Ответ 1

Вы можете попробовать что-то вроде этого:

$file_name = 'file.avi';
$file_url = 'http://www.myremoteserver.com/' . $file_name;
header('Content-Type: application/octet-stream');
header("Content-Transfer-Encoding: Binary"); 
header("Content-disposition: attachment; filename=\"".$file_name."\""); 
readfile($file_url);
exit;

Я только что протестировал его, и он работает для меня.

Обратите внимание, что для readfile, чтобы читать удаленный URL-адрес, вам нужно включить fopen_wrappers.

Ответ 2

Протестированный файл download.php

function _Download($f_location, $f_name){
  $file = uniqid() . '.pdf';

  file_put_contents($file,file_get_contents($f_location));

  header('Content-Description: File Transfer');
  header('Content-Type: application/octet-stream');
  header('Content-Length: ' . filesize($file));
  header('Content-Disposition: attachment; filename=' . basename($f_name));

  readfile($file);
}

_Download($_GET['file'], "file.pdf");

а ссылка для загрузки -

<a href="download.php?file=http://url/file.pdf"> Descargar </a>

Ответ 3

Попробуйте следующее:

<?php
$FileName = '/var/ww/file.txt';
header('Content-disposition: attachment; filename="'.$FileName.'"');
readfile($FileName);

Ключ header(). Вам необходимо отправить заголовок вместе с загрузкой, и он заставит диалог "Сохранить файл" в браузере пользователя.

Ответ 4

<?php
$FileName = '/var/ww/file.txt';
header('Content-disposition: attachment; filename="'.$FileName.'"');
readfile($FileName);

используя этот код. можно сохранить имя файла так, как вы хотите. например, у вас есть url: http://remoteserver.com/file.mp3 вместо "file.mp3" вы можете использовать этот script для загрузки файла как "newname.mp3"

Ответ 5

<?php

    $file_name = 'video.flv';
    $file_url = 'http://www.myserver.com/secretfilename.flv';
    header('Content-Type: application/octet-stream');
    header("Content-Transfer-Encoding: Binary"); 
    header("Content-disposition: attachment; filename=\"".$file_name."\""); 
    echo file_get_contents($file_url);
    die;

?>

Ответ 6

Я не знаю, это лучший способ или нет, но мне это нравится, шорт & простой.

Если вы хотите загрузить файл при посещении URL-адреса, вы можете сделать следующее

<a href="resume.pdf" download></a>
<script>document.querySelector('a').click();</script>