// 最近さ、ドツボだよね。
// はまるはまる。ディープな世界だわー。

<html>
<head><title>ファイルのダウンロード</title></head>
<body>

<?php
if($_GET["download"] == "on"){
$movie = "douga/douga.wmv";

if ($fd =fopen ($movie, "r")){ $size=filesize($movie);
$fname =basename ($movie);
header("Pragma:");
header("Cache-Control:");
header("Content-type: video/x-ms-wmv");
header("Content-Disposition: attachment; filename=\"".$fname."\"");
header("Content-length: $size");
while(!feof($fd)) {
$buffer = fread($fd, 4096); print $buffer;
}
fclose ($fd);
exit;
}
}
else{

?>

?download=on">ダウンロード

<?php
}
?>

</body>
</html>

// 最初は、else{ダウンロード先のリンクを表示して、}
//if(そのリンクがクリックされたら、){ファイルをダウンロードさせる。}

//fopenは、指定したファイルを、オープンする。
//ファイルハンドル =fopen(ファイル名,"読み込み専用とか書き込みとか");
// 最後の方の、fclose (ファイルハンドル);が出てくるまで開きっぱなし。

//filesizeは、ファイルの大きさを測る。30KBとかそういうの。
//filesize(ファイル名);
//basenameは、パスとか含まれた中からファイル名を抜き出す。
//basename(ファイル名);
// ボーーッとしてると、ありえないfilenameとか打ち出す。こわいこわい。

// で、ヘッダーがくるでしょー。

//while(ここの条件がOKの間じゅうは){ここが繰り返される}
//feof(ファイルハンドル)は、ファイルポインタが終端に来たら、true。
// うーん、カーソルが最後、みたいな。最後まで読みましたよーって。

// ただし、whileでfeof使うのはやや問題があるようで、stream_get_meta_dataのがいいみたい。(と書いてある。
// whileってのは、いわゆる無限ループを引き起こしちゃう可能性があって、
// whileで、PHPからやってるってことは、権限がWWWになるはずだから、
// rootでしか見れない多分、絶対パスとかの上の方、
// /etc/password/とかを見ようとすると、ずっと終われないから、
// あかん。(と書いてある。PHPマニュアルに。

// ここでは、前にビックリ(!)がきてるから、
// ファイルポインタが終端まで来ないは、ずっと繰り返してね。ということみたい。

//で、無事ダウンロードできました。WMVファイル。
// と思ってたら・・・ひらけねー

// 「ファイルが開けません。codecがないかもしれません。
// うそーん、だって直リンで落としたら開けるじゃん

// ダウンロードしたファイルのファイルサイズは、サーバにあるのと100%一緒。
// ふざけてんじゃないの、こいつー・・・こいつぅ、きゃはは。(疲れた。

// どうしたものかと思い、サーバにあるファイルと、ローカルで落としたファイルの
//右クリック→プロパティしてみた。

// 【サーバ上のファイル】詳細のところ、いろいろあるー
// 【ローカルのファイル】詳細のところ、いろいろないー

// いろいろ・・・消滅?

// ここら辺で、「もしかしてヘッダがおかしいのかな・・・」と疑い始める。

// そういえばさ、Locationとかするときにさ、よくアレが出るじゃない。
//header already sent」もーヘッダきてるし・・・プ(by PHP。
// 順番変えてみるべ。

<?php
if($_GET["download"] == "on"){
?>

$movie = "douga/douga.wmv"; if ($fd =
fopen ($movie, "r")){
$size=filesize($movie);
$fname =basename ($movie);
header("Pragma:");
header("Cache-Control:");
header("Content-type: video/x-ms-wmv");
header("Content-Disposition: attachment; filename=\"".$fname."\"");
header("Content-length: $size");
while(!feof($fd)) {
$buffer = fread($fd, 4096);
print $buffer;
}
fclose ($fd);
exit;
}
else{

?>

<html>
<head><title>ファイルのダウンロード</title></head>
<body>
?download=on">ダウンロード
<?php
}
?>
</body>
</html>

//よっしゃああああ!!
// 【教訓】ヘッダーが来るものは先にやれ