2012-01-16 6 views
13

私は自分のサイトのmp3を右クリックして保存する代わりに左クリックしてダウンロードするようにしています。そのためにはContent-Disposition:添付ファイルを設定する必要があります。これは私の最初のウェブサイトなので、実際にこれを行う方法は初めてですが、私はHTMLのマークアップでこれをやっていますか、それとも何とか私のホスティングサイトでこれを設定していますか?Content-Dispositionを実装する方法:添付ファイルですか?

マークアップの例を以下に示します。 MP3リストの

<div class="download"> 
<a href="MP3/Morgan Page, Sultan & Ned Shepard, and BT feat. Angela McCluskey.mp3" 
<img src="img/dlicon.png"/></a> 
</div> 
+3

クライアント。サーバー上にダウンロードサーバーとして機能するスクリプトが必要です。このスクリプトはContent-Dispositionヘッダーを発行します。 –

+0

さらに詳しい情報を提供できますか?どのWebサーバーを使用していますか? –

+0

私はHostGator.comを使用しています –

答えて

17

例:

<a href="download.php?file=testing.mp3">Download MP3</a> 
<a href="download.php?file=testing2.mp3">Download MP3</a> 

がdownload.php:

<?php 

$file = $_GET['file']; 

header('Content-type: audio/mpeg'); 

header('Content-Disposition: attachment; filename="'.$file.'"'); 

?> 
+4

上記のコードはファイル名に二重引用符と非ASCII文字で失敗します(RFC 6266参照)。 –

+0

@JulianReschkeはい、OPはファイル名を置き換えます(質問を参照してください、ファイル名はMorgan Page、Sultan&Ned Shepard、BT feat。Angela McCluskey.mp3)。私は私の答えを更新します。 –

+6

注:mp3上で実際にアクセスコントロールが必要な場合を除き、content-dispositionヘッダーが設定されたmp3を提供するようにサーバーを設定する方が良いでしょう。 PHPをファイルサーバとして使用すると、特に大容量のファイルでは処理が遅くなります。 –

3

他の人が言ったように、あなたはHTMLでそれをしないと、ダイナミックな溶液(例えば、PHPを使用して)過剰です。

あなたの場合は、Webサーバーの設定でContent-Dispositionヘッダーを設定します。 Apacheの場合、ヘッダbased on locationを設定するか、特定のファイル名に一致する.htaccessファイルを設定することができます。

+2

このためのダイナミックな解決策は、アプリ開発において常に起こります。たとえば特権を持つコンテンツを許可する前に認証を行う必要があるとします。認証チェックとファイルストリームは、しばしば同じ要求から来る必要があります。 – JoshuaDavid

1

すぎて、PHPでそのための特別な機能があります:

bool http_send_content_disposition (string $filename [, bool $inline = false ])

がここPHPマニュアルを参照してください:サーバー側の操作だと上のHTMLコードを介して行うことができないhttp://de2.php.net/manual/en/function.http-send-content-disposition.php

+4

注: 'http_send_content_disposition'はネイティブではありませんが、PECL拡張機能を介して利用できます:' PECL pecl_http> = 0.10.0' – zamnuts

関連する問題