kazpgmの日記

『プログラム自動作成@自動生成』作成の日記

TOOL更新_配信動画の”*.wmv”をダウンロードできるようにした。

”*.wmv”をダウンロードできるようにした。
ストリーム配信に”*.asx”を使っている。このままだと”*.wmv”をダウンロードすることができない。”ダウンロードして自PCで見たい”というリクエストがあった。方法を2通り考えた。
1.ダウンロードプログラムを使うやり方

「pubFlDld.php」を新規作成
これにより「http://kazpgm.ddo.jp/kaz01u/upload/」配下のファイルをダウンロードする。

2.普通のやり方

http://kazpgm.ddo.jp/kaz01u/upload/doc/Admin_pgm_Doc.wmvのリンクを作る。
「Windows Media Player」が立ち上がります。
映像が開始されるまで待ってください。
停止ボタンを押下してください。
全画面表示されていないときは、全画面表示にしてください。
メニューから
「ファイル」
 →
「メディアに名前をつけて保存」を選択してください。
ファイル名を変えずに任意のフォルダに保存してください。

という文章をWEB画面に記述する。

3.今回は「1.ダウンロードプログラムを使うやり方」を選んだ。(phpプログラム作成したいからという単純な理由。ストリーム配信画面がすでにあるのにさらに映像画面が出るのはどうかな。と、説明文を記述するとしつこいな。という考え。)

・でかいファイルを落とす時、このロジックにしないとバッファオーバーフローになります。
(このサーバーの場合130MB越えぐらいで)
 ・(1024*8)バイトづつ処理する。
  ・スクリプト実行の最大秒数。0:時間制限なしにする。
  ・PHPの出力バッファを強制出力する。
  ・WEBバッファに出力するようにする。
   <=2009/07/12 パス・トラバーサル脆弱性対応。
    「'\'を/に変更する。./はエラーにする。ファイル名チェック。ファイルがないときはエラーにする。」を
     追加した

・新規作成した「pubFlDld.php」
<?
//  ========================================================
//  pubFlDld.php ---- ファイルダウンロードプログラム
//  2009 kaz PHP自動作成◎自動生成お助けTOOL.(http://kazpgm.ddo.jp/)
//  修正BSDライセンス。
//  2009/07/11 - 新規作成。
//  http://d.hatena.ne.jp/kazpgm/20090711/1247302296
//  ========================================================

    $_REQUEST['fname'] = str_replace('\\', '/', $_REQUEST['fname']); // '\'を/に変更する。
    if (ereg("\.\/", $_REQUEST['fname'])) { // ./はエラーにする。
        echo "faild file name. 01";
        exit;
    }
    if (!ereg("^doc\/[0-9a-zA-Z_\-]+\.[0-9a-zA-Z_\-]+$",
        $_REQUEST['fname'])) { // ファイル名チェック。
        echo "faild file name. 03";
        exit;
    }
    if (!is_file(dirname(__FILE__) . '/upload/' . $_REQUEST['fname'])) { // ファイルがないときはエラーにする。
        echo "faild file name.  02";
        exit;
    }
    $handle = fopen(dirname(__FILE__) . '/upload/' . $_REQUEST['fname'], "rb");
    if ( !$handle ) {
        echo "faild file name.  04";
        exit;
    }
    $flen = filesize(dirname(__FILE__) . '/upload/' . $_REQUEST['fname']);
    $path_parts = pathinfo(dirname(__FILE__) . '/upload/' . $_REQUEST['fname']);

    header("Content-Disposition: attachment; filename=" . $path_parts['basename']);
    header("Content-Type: application/octet-stream");
    header("Cache-Control: public");
    header("Pragma: public");
    header('Content-Length: ' . $flen);
    $contents = '';
    while(!feof($handle)) {
        set_time_limit(0); // スクリプト実行の最大秒数。0:時間制限なし
        print(fread($handle, 1024*8));
        ob_flush();       // PHPの出力バッファを強制出力します。
        flush();          // Webサーバの出力バッファを強制出力します。
    }

    fclose($handle);
?>

4.追加したWEB画面

http://kazpgm.ddo.jp/outlineDoc.html
http://kazpgm.ddo.jp/IntroductionDoc2.html
http://kazpgm.ddo.jp/IntroductionDoc7.html
「何度も見る場合、ここをクリックしてダウンロードしてください。」のリンク

内容例)
==<<outlineDoc.html追加start>>==
<a href="http://kazpgm.ddo.jp/kaz01u/pubFlDld.php?fname=doc/kaz_PHPTOOL_Admin01doc.wmv" ><b>何度も見る場合、ここをクリックしてダウンロードしてください。</b><br />
<font size=1>(56Mbなので「ダウンロード」の「保存」ボタン押下後20秒ぐらいかかってから「名前を付けて保存」ダイヤログが出ます。)</font></a> <br />
==<<outlineDoc.html追加end>>==

補足)以前に「秘密ファイルダウンロード」で「flDld.php」を作ったが今回みたいなでかいファイルはダウンロードできないロジックになっている。

追加)http://kazpgm.ddo.jp/IntroductionDoc2.htmlの「(3)・・・」に(音声と映像にずれがありちょっと見づらいので、原本1から11別々に配信するように変更する予定です。)を追加した。
<=2009/07/13 01:00 原本9本を連続配信するようにasxを修正した。今は音声と映像ずれていない。



11:00-19:00