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インターフェイスでファイルをユーザーにダウンロードさせることが可能です。