22

我希望在我的一个网站上的每个视频下方添加一个“下载此文件”功能。我需要强制用户下载文件,而不仅仅是链接到它,因为它有时会开始在浏览器中播放文件。问题是,视频文件存储在单独的服务器上。

有什么办法可以强制在 PHP 中下载?

4

7 回答 7

49

你可以尝试这样的事情:

$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启用您的。

于 2009-02-10T06:53:35.360 回答
5

测试的 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>
于 2015-05-08T05:07:16.440 回答
3

试试这个:

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

关键是header(). 您需要将标题与下载一起发送,它将强制用户浏览器中的“保存文件”对话框。

于 2009-02-10T07:57:18.280 回答
0
<?php
$FileName = '/var/ww/file.txt';
header('Content-disposition: attachment; filename="'.$FileName.'"');
readfile($FileName);

使用此代码。是否可以将文件名保存为您想要的名称。例如,您有 url:http: //remoteserver.com/file.mp3 而不是“file.mp3”,您可以使用此脚本将文件下载为“newname.mp3”吗

于 2010-03-05T22:56:54.813 回答
0
<?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;

?>
于 2017-09-25T23:52:48.367 回答
0

我不知道这是否是最好的方式,但我喜欢这样,简短而简单。

如果你想在访问URL时下载文件,你可以这样做

<a href="resume.pdf" download></a>
<script>document.querySelector('a').click();</script>
于 2019-08-20T08:21:17.703 回答
0

索引.php

<!doctype html>
<html>
<head>
<meta charset="utf-8">
<title>download</title>
</head>

<body>
        <a href="download.php?file=ID_do_arquivo"> download </a>
</body>
</html>

.htaccess

Options -Indexes
Options +FollowSymlinks
deny from all

下载.php

$file = "pdf/teste.pdf";
 if (file_exists($file)) {
    header('Content-Description: File Transfer');
    header('Content-Type: application/octet-stream');
    header('Content-Disposition: attachment; filename='.basename($file));
    header('Content-Transfer-Encoding: binary');
    header('Expires: 0');
    header('Cache-Control: must-revalidate, post-check=0, pre-check=0');
    header('Pragma: public');
    header('Content-Length: ' . filesize($file));
    ob_clean();
    flush();
    readfile($file);
    exit();
}
于 2020-06-19T21:43:12.840 回答