ボタンをアンカーリンクにする。ダウンロードボタンを作る。

リンクと言えば通常アンカータグで作るわけですが、ボタンでリンクを作る時ってどうするんだろうと...と思ってやっているみると案外できない。調べてみるとちょっと一癖あるんですね。

というかなり単純な機能なんですが、Javascriptのwindow.openを使ってリンク先を開くんですね。知らなかった。
<input type="button" value="Link先へ" onclick="window.open('./sample.txt')" />
単純にこれだけのことなんですが。
しかし、指定のファイルを開かずに強制的にダウンロードさせるという風になると自体はもっとややこしいことになっていて、ここではPHPを使ってやってみます。

ボタンでダウンロード

PHPを使って強制的にファイルをダウンロードさせるにはヘッダを使うんですね。

ちょっと複雑なコードになりますが、強制的に行うにはこれが一番いい感じです。
xhtml
<input type="button" value="Down load" onClick="location.href='./download.php'">
PHP
<?
$file = "sample.txt";
$file_length = filesize($file);
header("Content-Disposition: attachment; filename=$file");
header("Content-Length:$file_length");
header("Content-Type: application/octet-stream");
readfile ($file);
?>

本来は<form></form>内に書くものなので文法上は<form>を使うべきかもしません。その時<form>の中にはnameもactionもclassもmethodも書く必要がありません。要するに形式的なタグとなります。
ダウンロードされるファイルはだいたいなんでもいけるみたいです。全部は試していませんが、よくダウンロードされるPDFファイルなどもこれで大丈夫です。