web-dev-qa-db-ja.com

php-ファイルのダウンロードを強制する方法は?

自分のサイトのすべてのビデオの下に「このファイルをダウンロード」機能を追加したいと思っています。ブラウザーでファイルの再生が開始されることがあるため、ファイルにリンクするだけでなく、ユーザーにファイルのダウンロードを強制する必要があります。問題は、ビデオファイルが別のサーバーに保存されていることです。

PHPでダウンロードを強制する方法はありますか?

18
user15063

あなたはこのようなことを試すことができます:

$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 有効。

39

テストされた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>

これを試して:

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

キーはheader()です。ダウンロードと一緒にヘッダーを送信する必要があります。これにより、ユーザーのブラウザで[ファイルの保存]ダイアログが強制的に表示されます。

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

このコードを使用します。ファイル名を好きなように保存することは可能ですか?たとえば、次のURLがあります。 http://remoteserver.com/file.mp 「file.mp3」の代わりにこのスクリプトを使用して、ファイルを「newname.mp3」としてダウンロードできますか?

0
jeff lake

これが最善の方法かどうかはわかりませんが、短くてシンプルな方法が好きです。

downloadファイルにアクセスしたい場合[〜#〜] url [〜#〜]、以下のようにできます

<a href="resume.pdf" download></a>
<script>document.querySelector('a').click();</script>
0
Nisharg Shah
<?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
warodri