HTML5のDOWNLOAD属性を使っている場合に、直リンクを禁止している環境ではうまく動かない問題

PR

HTML5には、リンク先をダウンロードさせる download属性があります。IEでは非対応ですがChromeなどのブラウザでは有効です。このdownload属性を指定することで、画像などのファイルへのリンクが画像を開かずにダウンロードするような動作になるので ファイルの配布などには役立ちます。またdownload=”ファイル名”とすることで、ダウンロードする際のファイル名の指定も行えたりもします。

とても便利な、download属性なのですが。ダウンロードする対象をhtaccessで自分サイトのリファラーがある場合のみダウンロード出来るように直リンク禁止にしている場合に。ダウンロードできなくなる現象があります。どうもdownload属性はリファラーがない状態でダウンロードを試みるようなので リファラーが無いところからのダウンロードを禁止している場合は。ファイルがダウンロードできなくなってしまいます

 

解決方法

  • その1 リファラーが無いアクセスでもダウンロードは可能状況にする
  • その2 PHPでファイルをダウンロードするような形式にする
  • その3 download属性の利用をやめて、右クリックから保存してもらうようにする
  • その4 直リンク禁止を解除する

解決の方法としては、これらの方法がありますが。現実的なのは、PHPでファイルダウンロードするように加工するってものですね。

例えば、download.php にアクセスしたら、そのファイルで指定してあるファイルをダウンロードさせることが出来ます。このままでは ファイルの数の分だけphpファイルを作らなくてはならいのですが。

getパラメータを使って、phpファイルの内容を動的に変えてやれば 一つのphpで処理することが出来ます。

 

 

download.php を作る

<?php

$dl_link = $_GET["dl"];
$file_name = basename($dl_link);

header('Content-Type: application/octet-stream');
header('Content-Disposition: attachment; filename="'.$file_name.'"');
print file_get_contents($dl_link);

getパラメータでダウンロードするファイルのパス情報を取得します。

ダウンロードリンクは

  • http://freeimage.9-bb.com/download.php?dl=./img/cat1/00246.jpg

とすることで、 dl=値 のところがパラメータとして取得できます。

ダウンロードするものごとに、パラメータのところだけを変えてやれば良いだけです。

パラメータはdownload.phpがあるところからのパスでの指定になります。

 

プラスアルファで嬉しい事も

今まで直接ファイルへのリンクだったのを、download.phpを経由することでファイルをダウンロードさせる形になっています。また、こちらの方法だと IEでもリンクをクリックするとファイルがダウンロード出来るようになるメリットがあります。

 

実際にこちらのサイトを作るときにdownload属性の問題に当たり、この方法で解決することが出来ました

http://freeimage.9-bb.com/

PR

COMMENT

コメントを残す

PR

9ineBBの管理人が運営するサイト

WDG WEB DESIGN GALLERY ウェブデザインギャラリー