課題提出するファイル名によってリンクがたどれない場合がある

課題提出するファイル名によってリンクがたどれない場合がある

- Takahiro Kagoya の投稿
返信数: 9

以前4月に、かなり白井先生に対応していただいた以下の件に少し関係しそうなのですが...
http://moodle.org/mod/forum/discuss.php?d=94176

学生が課題に提出したファイル名が、『十年.txt』のようなファイル名だった場合、アップロードは正しくされるのですが、その後、そのファイルへのリンクをクリックししてもファイルが読めません。(実データはアップロードされています)

『一年.txt』のようなファイル名にしてアップロードすると問題ないので、ファイル名に含まれる文字列中に、スラッシュ等の文字と同じ文字コードが含まれるのかもと疑っているのでが、上記のリンクの通り、file.phpを変更して、強制的にUTF-8にして渡してはいるはずなのですが...

ちょっと説明不足かもしれませんが、いろいろ試してみて詳細が分かりましたらまた報告させて頂きます。

何かアドバイスをいただけたら幸いです。

Takahiro Kagoya への返信

Re: 課題提出するファイル名によってリンクがたどれない場合がある

- Tatsuya Shirai の投稿

 そうですねぇ.当方の環境では特に問題なく「十年.txt」を課題提出し,それをダウンロードできます.IISの問題なのか,私が試したのとは違う画面でダウンロードを試されたのか.

Takahiro Kagoya への返信

Re: 課題提出するファイル名によってリンクがたどれない場合がある

- Takahiro Kagoya の投稿

var_dumpで確認してみたところ、
「十年.txt」は、UTF-8に変換した後でも「□/□N.txt」のように扱われているようです。

それで

$pathname=mb_convert_encoding($pathname,'UTF-8', "auto");

としていたところを、

$pathname=mb_convert_encoding($pathname,'UTF-8', "sjis-win");

のように変更したら、リンクが辿れました。
ただし、ダウンロードするファイル名「十年.txt」が「年.txt」のようになります。
十という文字だけでなく表という文字も同じような扱いになります。「表示.txt」が「示.txt」となります。
テールバイトが0x5C(¥)の表とか十とかソはどうも同じ扱いのようです。
参考:http://www.shtml.jp/mojibake/sjis_cgi.html
参考:http://ja.wikipedia.org/wiki/Shift_JIS

内部的に、0x5Cを除外してUTF-8に変換されている?

Takahiro Kagoya への返信

Re: 課題提出するファイル名によってリンクがたどれない場合がある

- Tatsuya Shirai の投稿

autoで文字コードを判別するには短すぎた,ということかも知れませんね.

SJIS-WINということは,IISのPATH_INFOなどがシフトJISに勝手に変換されてしまう問題に関係があるのでしょうか.

SJIS-WINを指定してもうまく行かないのは悩ましいですねぇ...

Takahiro Kagoya への返信

Re: 課題提出するファイル名によってリンクがたどれない場合がある

- Tatsuya Shirai の投稿

 久しぶりにIIS(WindowsXP上)を起動して試してみました.

 学生として,十年.txtを課題にアップロード(単一ファイル)しました.

 それを学生として,教師(クイック評定)として,ファイル名をクリックしてダウンロードしてみましたが,特に問題はありませんでした.
 HTTPの”スラッシュを使用する”のOn/Offが関係しているのかな?とも思ったのですが,これも関係無さそうです.

 試したのはfs_moodle2.7aです.ブラウザはIE7です.
 Firefoxは試していません.

 もしかしたらfs_moodle(あるいはMoodle)のバージョンの違いによるものかも知れませんよ.

Tatsuya Shirai への返信

Re: 課題提出するファイル名によってリンクがたどれない場合がある

- Takahiro Kagoya の投稿

ご確認いただきありがとうございます。

問題ないようですね。ってことはIISのバージョンもしくはfs_moodleのバージョン、あういはphpのバージョンなどの違いがありうるということですね。

こちらでは、FF2でも同様の症状なので、クライアントの問題ではなさそうです。

前回のファイル名が落ちる(「十年.txt」→「年.txt」)けど、とりあえず開ける状態で対応しようと思っていたのですが、本日別の科目の方でも、学生の提出したファイルが開けない...という報告が出てきて調査中です。

また、状況をまとめて報告させていただきます。

Takahiro Kagoya への返信

Re: 課題提出するファイル名によってリンクがたどれない場合がある

- Tatsuya Shirai の投稿

http://moodle.org/mod/forum/discuss.php?d=95249

この問題を解決する際に,fs_moodle2.4c以降,何か関係する箇所に手を入れてしまっている可能性があります.

 いまのmoodleフォルダをmoodle2などバックアップした上で,最新版に一時的に差し替えて試してみて頂けないでしょうか.

Tatsuya Shirai への返信

Re: 課題提出するファイル名によってリンクがたどれない場合がある

- Takahiro Kagoya の投稿

あ、この記事が有ったことを忘れていました。5Cのコードが含まれる話として関連性がありそうです。(でも全体像を理解し切れていません 笑顔 )

週末、出勤しないため、サーバーのファイルをいじれないので、来週以降確認したいと思います。

それと、一つ前にあげた、別の科目でのトラブルの原因は、どうも課題のタイプが高度なアップロードの場合に、スラッシュ使用をONにしていても、
file.php?file=/123/moddata/assignement...
というようなリンクになることが原因となっているようです。

本来なら、
file.php/123/moddata/assignement...

となるべきです。

未確認ですが、1.9のバージョンによっては解決していのかもしれません。

Takahiro Kagoya への返信

Re: 課題提出するファイル名によってリンクがたどれない場合がある

- Takahiro Kagoya の投稿

スレッドを分けるべきかもしれませんが...

ひとつ気づいたことがあります。課題のタイプとして、(学生がみる画面で)

単一ファイルの場合:アップロードしたファイルへのリンクがURLエンコードされていない。

高度なアップロードの場合:アップロードしたファイルへのリンクがURLエンコードされている。

ただ、IEでそのリンクをクリックすると、いずれもそれなりにダウンロードは可能ですが、いずれの場合も「十」とか「表」の文字が消えてしまいます。

Takahiro Kagoya への返信

Re: 課題提出するファイル名によってリンクがたどれない場合がある

- Takahiro Kagoya の投稿

高度なアップロードでスラッシュ使用ONが反映されていないのは現バージョンでは解決されていることがわかりました。

mod/assignment/type/upload/assignment.class.php

この中のprint_student_answer 関数にて、$ffurlを決定するときに、get_file_urlを使っていなかったことが原因のようで、Revision 1.29.2.8 (4月8日版)で修正されています。

http://cvs.moodle.org/moodle/mod/assignment/type/upload/assignment.class.php?r1=1.29.2.7&r2=1.29.2.8