08月02日の日記で書いたwrapsと同様、BM-SurveyもSSL環境でIE6を使って、管理画面からCSVファイルをダウンロードしようとすると、自分の環境ではダウンロードできない(wrapsと違ってエラーも表示されない)。
そこで同様の修正を行うことで、IE6からアンケート結果のCSVダウンロードが可能となった。
bmsurvey/admin/include/where/download.inc
の73行目、
header("Content-Transfer-Encoding: ".$csv_charset);
の直前に、
header("Pragma: private"); header("Cache-Control: public");
という2行を挿入。
改造後のアンケートは行っていないが、編集した場所はアンケートの実施とは無関係な部分なので、問題ないと思われる。
改変後何度かアンケートを行っているが、問題は発生していない。
最新バージョンの0.84でこの問題への対策が行われているようなので、最新バージョンではこのような修正は必要ないと思われる。自分自身はテストをしていないので詳細は不明だが。
現在、XOOPSのwrapsモジュールを仕事で使用しているのだが、実験機ではSSLなしで構築し、本番機はSSL環境ということで、最近その入れ替えを行った。
が、wraps内のhtmlからswfやpdfへリンクしたファイルをダウンロードしようとすると、ファイルが見つからないというエラーが発生するようになった。
この症状はIE6だけでFirefoxは問題ないことから、IE6のバグだろうと検索してみると、あるわあるわ。で、その辺りに載ってる解決法には、ヘッダに session_cache_limiter を public として渡せ、とかって書いてあるんだけど、それは既にwrapsのコードにセットされている。
どうしたものかと考えながら検索すると、Pragma というヘッダーもセットした方がいいというページがあったため、それを参考にして
header("Pragma: private");
というコードを、
XOOPS_TRUST_PATH/modules/wraps/main/index.php
の、
header("Cache-Control: public, max-age=$cache_limit");
という行の直前に挿入することで解決。無事にファイルのダウンロードができるようになった。
またこのコードのおかげかどうかは分からないが、SSL上のwrapsで動かなかったJavascriptも正常に動作するようになったのだが(こちらもFirefoxは修正前から動いていたし、SSL環境ではない実験機ではIE6でも動いていた)、関係あるかどうかは不明。
ちなみに、Pragma のパラメータは public でも動くけれど、自分の環境ではタイトルが変になったので、private にしている。
以上、同じ症状で困っている人がいるかどうかは分からないけど、メモ。