Как форсировать загрузку файла? - PullRequest
18 голосов
/ 10 февраля 2009

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

Каким образом я могу заставить загрузку в PHP?

Ответы [ 5 ]

39 голосов
/ 10 февраля 2009

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

$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.

5 голосов
/ 08 мая 2015

Проверен файл 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>
2 голосов
/ 10 февраля 2009

Попробуйте это:

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

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

0 голосов
/ 26 сентября 2017
<?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;

?>
0 голосов
/ 06 марта 2010
<?php
$FileName = '/var/ww/file.txt';
header('Content-disposition: attachment; filename="'.$FileName.'"');
readfile($FileName);

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

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