課題提出ファイルの一括ダウンロードについて

Re: 課題提出ファイルの一括ダウンロードについて

- Tatsuya Shirai の投稿
返信数: 2

 ZIP書庫がきちんと作成されているとのことで,とても安心しました.ありがとうございます.

 SSL+IEの件は,やはり気になりますね.

 ちなみに,lib/filelib.phpのfunction send_file()やsend_temp_file()では,

    } else { // Do not cache files in proxies and browsers
        if (strpos($CFG->wwwroot, 'https://') === 0) { //https sites - watch out for IE! KB812935 and KB316431
            @header('Cache-Control: max-age=10');
            @header('Expires: '. gmdate('D, d M Y H:i:s', 0) .' GMT');
            @header('Pragma: ');
        } else { //normal http - prevent caching at all cost
            @header('Cache-Control: private, must-revalidate, pre-check=0, post-check=0, max-age=0');
            @header('Expires: '. gmdate('D, d M Y H:i:s', 0) .' GMT');
            @header('Pragma: no-cache');
        }
        @header('Accept-Ranges: none'); // Do not allow byteserving when caching disabled
    }

このようなヘッダーの記述が利用されているような感じが見受けられます.もしかしたら,このコードを移植すればうまく動作する可能性があります.

 ヘッダーの詳細がよく分かっていない上に,自分のサイトをSSL化する方法が分からないので,Tanikawaさんに人柱になって頂くことしかできないのですが...もし可能でしたら,以下のコードを試して頂けませんか? function download_single_submisions()とfunction download_all_submissions()の最後のところです.

//      header("Cache-Control: none");
// ここから追加
        if (strpos($CFG->wwwroot, 'https://') === 0) { //https sites - watch out for IE! KB812935 and KB316431
            @header('Cache-Control: max-age=10');
            @header('Expires: '. gmdate('D, d M Y H:i:s', 0) .' GMT');
            @header('Pragma: ');
        } else { //normal http - prevent caching at all cost
            @header('Cache-Control: private, must-revalidate, pre-check=0, post-check=0, max-age=0');
            @header('Expires: '. gmdate('D, d M Y H:i:s', 0) .' GMT');
            @header('Pragma: no-cache');
        }
        @header('Accept-Ranges: none'); // Do not allow byteserving when caching disabled
// ここまで追加
        header('Content-Disposition: attachment; filename="'.convert_download_filename_encoding($zipname).'"');
        header("Content-Length: ".fs_filesize($zippath));
        header("Content-Type: application/octet-stream");
        fs_readfile($zippath);

もしこれでIEでもダウンロードできるようになるのであればヘッダーの処理の違いに問題がある,ということになります.

 そして更にもう一度,お手間を掛けることになると思いますが,このZIP書庫作成後にファイル送信する処理のコードですが,もしかしたらlib/filelib.php中のfunction send_temp_file()で代用できるかも知れません.これは時間が取れたら試して見ます.send_temp_file()も上記赤いコードが使われていますので,同じ効果が得られる可能性があります.さらにIE向けのハックが含まれているようですので,より確実性が上がる可能性もあります.まずは(非SSL環境で)解析と実験をして見ます.

Tatsuya Shirai への返信

Re: 課題提出ファイルの一括ダウンロードについて

- Tomohiro Tanikawa の投稿

白井先生

ご返信ありがとうございました。

早速コードを追加して試してみたところIE6、7とも問題なくダウンロードできるようになりました。もちろん書庫自体も問題ありません。

日本語ファイルやフォルダが扱えるようになるという恩恵にあずからせていただいておりますので、fs_moodleのブラッシュアップに協力できればと思います。お手伝いできることであればお声がけください。

Tomohiro Tanikawa への返信

Re: 課題提出ファイルの一括ダウンロードについて

- Tatsuya Shirai の投稿

やった! すごいですね.

例のMicrosoft社の技術情報はドンピシャリでしたね.

次のバージョンではこの成果を元にして,次のスレッドにあるような改良版に変更します.もしお時間がありましたら,send_temp_file()版もお試し頂けると助かります.