WEB非公開ディレクトリのファイルをダウンロードする
2008.06.05
WEBサイトの開発で以下の要件によく出くわします。
- WEBインターフェイスでユーザーにファイルをダウンロードさせる
- ダウンロードさせるファイルそのものは、WEBで公開されていないディレクトリに保存
簡単にこの要件を満たすには以下の2つのファイルを使用してページを構築します。
index.php —ダウンロードファイルの一覧
dl.php ——ファイルをダウンロードさせる
index.php
<?phpdefine(‘DATADIR’, ‘/var/dlfile’);$afiles = scandir(DATADIR);?><html><head>
<title>ダウンロード</title>
</head><body><table>
<tr><td>ファイル名</td><td> サイズ</td></tr>
<?php
foreach($afiles as $value)
{
if(($value == “.”) OR ($value == “..”))
continue;echo “<tr><td><a href=\”dl.php?fname=”. $value. “\”>”. $value. “</a></td><td> “. filesize(DATADIR. “/”. $value) . ” bytes</td></tr>\n”;
}
?>
</table>
</body></html>
ダウンロードファイルの一覧を取得するには、scandir(“パス”)を使用します。
dl.php
<?phpdefine(‘DATADIR’, ‘/var/dlfile’);if (isset($_GET[‘fname’])) {
$FilePath = DATADIR. “/”. $_GET[‘fname’];
$FileName = $_GET[‘fname’];
}$file_length = filesize($FilePath);
header(“Content-Disposition: attachment; filename=$FileName”);
header(“Content-Length:$file_length”);
header(“Content-Type: application/octet-stream”);
readfile ($FilePath);
?>
header()とreadfile()を使用してファイルをダウンロードします。ファイル名などはGETで取得しています。
改善の余地はありますが、WEBインターフェイスでファイルをユーザーにダウンロードさせることが可能です。