訪問者がサーバーからファイルをダウンロードできるようにする小さな PHP スクリプトを作成しました。ファイルの 1 つを取得し、ベース名を取得して、ヘッダーとファイルをクライアントに送信します。
ただし、ファイルをダウンロードするときに、index.php を取得することもあれば、proper_file_name.zip を取得することもあります。
なぜ時々うまくいくのか、なぜ時々うまくいかないのか、私にはよくわかりません。アドバイスをいただければ幸いです。
これは私のソースコードの関連部分です:
// Client requested custom byte range
if(isset($_SERVER['HTTP_RANGE']))
{
$range = explode('-', substr($_SERVER['HTTP_RANGE'], 6));
$seekStart = intval($range[0]);
if ($range[1] > 0)
$seekEnd = intval($range[1]);
header('HTTP/1.1 206 Partial Content');
header(sprintf('Content-Range: bytes %d-%d/%d', $seekStart, $seekEnd, $size_vfile));
}
else // Set headers for full file
header('HTTP/1.1 200 OK');
// Get basename of filename
$filename = basename($filename);
// Send headers to client
header('Cache-Control: private');
header('Content-Type: application/octet-stream');
header("Content-Disposition: attachment; filename=\"$filename\"");
header('Content-Transfer-Encoding: binary');
header('Content-Description: File Transfer');
header('Content-Length: '.$file_size);
header('Accept-Ranges: bytes');