はじめまして

はじめまして

- Motoyuki OHMORI の投稿
返信数: 16
はじめまして。福岡の筑紫女学園大学の大森と申します。

試行錯誤しながらMoodleを導入して、ようやく何とか安定して運用できているかなという段階までこぎつけた者です。かなり急ピッチで導入したため、日本語ファイル名などを全てbase64にencodeして扱う様にしていたり、かなり独自のコードから乖離してしまっています。このコースをちゃんと拝読してから、導入すれば良かったと思っているところです。

今後は皆様の御助言などを基により良い解決策によって問題を解決したいと思っています。よろしくお願いします。




Motoyuki OHMORI への返信

Re: はじめまして

- Mitsuhiro Yoshida の投稿
画像 Developers 画像 Particularly helpful Moodlers 画像 Translators
> 今後は皆様の御助言などを基により良い解決策によって問題を解決したいと思っています。よろしくお願いします。

こちらこそ、よろしくお願い致します。

Motoyuki OHMORI への返信

Re: はじめまして

- Tatsuya Shirai の投稿

 はじめまして,大森先生.

 個人的な興味で伺いたい点があります.
 日本語ファイル名を全てbase64にエンコードする改造を行なわれたとのことですが,これはどのような理由によるのでしょうか? また,どのようなテクニックを使って実現されたのでしょうか?

#もしかして,サーバOSが日本語Windowsではないでしょうか ^^

Tatsuya Shirai への返信

Re: はじめまして

- Motoyuki OHMORI の投稿
はじめまして、白井先生、

記憶が曖昧なのですが、確か、$CFG->unicodecleanfilenameを 1 にしていても、オリジナルのMoodleのコードで半角の空白などを含んだファイル名が何か別のファイル名に変わってしまったためだったと思います (記憶が違っていたら、申し訳ありません)。

そして、私の環境では、半角の空白などを多用するユーザも少なからずいるため、base64にした次第です。OSへの依存度も低くなるかなと思いましたので、勢いで修正してしましました。なお、URL encodeではMoodleかPHPの関数のどこかで自動的に decode されてしまったので、base64を選択しました。

実現方法ですが、Moodleのコードを変更し、clean_filename() などで base64 に encode し、Moodle内部では、全てのファイル名を base64 で扱う様にしました。また、ウェブブラウザへ応答を返す際には、base64 でencodeされたファイル名を decode する様にしました (一部、decodeしきれていない個所もまだあるのですが、、、)。

# サーバの OS はMoodleのコードを変更した当時は NetBSD でした (現在は、運用上の理由で CentOS を使っています)。
Motoyuki OHMORI への返信

Re: はじめまして

- Tatsuya Shirai の投稿
 大森先生、回答ありがとうございます。
 私も同じようなファイル名の文字化け対策をMoodleに対して行いました。その際に候補に挙げ得た選択肢の一つが、大森先生の行った、Moodle上のファイル名をUTF-8ではなくファイルシステムに対応した文字コードに変換するというものでした。
 私の場合はMoodle上はUTF-8で貫き通し、ファイルシステムにアクセスする際に文字コード変換を行う方法を洗濯しました。
 私とは別の方法で同じ問題の解決を試みた方が存在した、というのはとても心強いです。今後もよろしくお願いします。
Tatsuya Shirai への返信

Re: はじめまして

- Motoyuki OHMORI の投稿
白井先生、ご返信ありがとうございます。

このコース内の記事を拝読し、白井先生の作られた fs_moodle の存在を今更ながら知りました。私の解決策はまだまだ不十分なところがありますので、白井先生のコードを参考にさせて頂きたいと思っております。

今後ともよろしくお願いします。
Motoyuki OHMORI への返信

Re: はじめまして

- Haruhiko Okumura の投稿
三重大はサーバ側のファイル名はUTF-8のままですが,今のところ不具合はなさそうです(「ない」というと言い過ぎになるかな。再現できないトラブルの報告はけっこうあります)。原理上Unix系サーバであれば NUL 以外は透過のはずですので,不思議です。

半角の空白も含めて問題ないと思いますが,フォーラムの通知メールに含まれるリンクをクリックした場合は切れてしまいます。これは何か良い方法はないものでしょうか。
Haruhiko Okumura への返信

半角空白を含むファイル名の問題

- Tatsuya Shirai の投稿

 半角の空白を含むファイル名をダウンロードできない問題は,

http://www.suzuka-ct.ac.jp/mech/moodle/mod/wiki/view.php?id=320&page=Shirai007

奥村先生から教わった上記(Shirai007)方法で対策しました.これはいまでは本家の方でも対策済みですね.

 あと,確かMoodleではファイル名に半角記号の使用を認めていなかったと思うのですが,その制限を緩和(Windowsでファイル名に使用不可な記号は除く)する改造も行なったはずです.ただ,いま探すとそれがどこだったのか分からなくなっています...

あ,ありました.これですね.

http://www.suzuka-ct.ac.jp/mech/moodle/mod/wiki/view.php?id=320&page=Shirai049

Tatsuya Shirai への返信

Re: 半角空白を含むファイル名の問題

- Motoyuki OHMORI の投稿
白石先生、

情報をありがとうございます。ダウンロードできない問題は、同じ様に修正していました。

あと、半角文字の制限も先生と同じ様な感じで緩和しております。ただ、単なる興味本位なのですが、制御文字なども受け付ける様にされているのには、何か特別な理由があるのでしょうか?もし、何か理由があれば、教えて頂けると幸いです。

# shift-jis のためとかでしょうか。。。

Motoyuki OHMORI への返信

Re: 半角空白を含むファイル名の問題

- Tatsuya Shirai の投稿

 ファイル名を画面に表示するとベルの音が鳴るように...という訳ではありませんウインク

 単に,Windowsではファイル名に使用できない文字のみ _ に変換するようにコードを書いただけです.制御文字のことは考えていませんでした.キーボードから入力可能かどうかは分かりませんが,ファイル名を自動生成する際に誤って作成してしまう恐れは確かにありますね.消せなくなると怖いですが....OSが自動的に無視してくれることを(現段階では)期待しています.

 時間が取れたら,実際に制御文字を含むファイル名が作成できるか,そしてそれを参照・削除可能かどうかを試してみようと思います.御指摘ありがとうございました!

#携帯電話から絵文字でファイル名を入力すると(携帯電話からであれば)絵文字でファイル名が表示されます.一瞬,”時代が変わった”感がありました.

Haruhiko Okumura への返信

Re: はじめまして

- Motoyuki OHMORI の投稿
はじめまして、奥村先生、

UTF-8そのままでも問題ないのですね。。。私の場合は、Moodleのコードかユーザランドのライブラリなどが原因だったのだと思います。自前CVS Repository を SVN に移行した際に commit log などがなくなってしまったので、明確な理由を思い出せません。。。曖昧で申し訳ありません。

確かに、先生のおっしゃる通り、UNIX 系 (POSIX準拠?) であれば、NUL以外は透過的になはずだとは思います。ただ、奥村先生に御指摘を受けて、少し気になったので、NetBSD kernel のコードを見てみました。どうも、system call辺りで、OS依存のディレクトリのセパレター (/) などは必ずしも透過的ではない様にも見えます。kernel内では/も透過かかと予想していましたが、予想とは違う実装でした。

さて、フォーラムの通知メールに含まれるリンクとは、フォーラムの本文の中でしょうか?それとも添付でしょうか?1.9.2 ではコード自体は対応できている様にも見えるのですが、ちょっと試してみたいと思います。
Motoyuki OHMORI への返信

Re: はじめまして

- Haruhiko Okumura の投稿
すみません,/ を忘れていました。

私もあまり記憶がないのですが,昔Macな人からCD-Rをもらったところファイル名に日付が 1999/08/24 みたいに丁寧に振られていてLinuxで開けなかったのでカーネルのコードを追って読めるようにした覚えがあります。

後半については,添付ファイルの名前のことでした。HTMLメールなら問題ないかもしれませんが,テキストメールの場合,メールソフトがURLっぽいところをリンクに直してくれるのですが,それが必ずしもうまくいかないという意味で,Moodleではどうしようもないところです。
Haruhiko Okumura への返信

Re: はじめまして

- Tatsuya Shirai の投稿

 Quickmailなどでファイルを添付した場合にマルチバイトのファイル名を使用すると添付ファイル名が化ける問題であれば,

http://www.suzuka-ct.ac.jp/mech/moodle/mod/wiki/view.php?id=320&page=view/lib%2Fphpmailer%2Fclass.phpmailer.php#Shirai

このように修正しています.

 メール本文中のURLっぽい部分に関してはURLエンコードするように修正する必要がありそうですね.もし手動でURLを埋め込むのであればブラウザのURL入力欄からコピーする際に(上記URLのように)変換してくれるようですが(IE7の場合).

 確かMoodleからフォーラムへの新規投稿を定期的にメールで受け取る際のお話でしたよね.私は直接Moodleにアクセスしてしまうので現象を確認したことがありませんでした.なるほど,確かに気になりますね.時間ができたら試してみます.

Tatsuya Shirai への返信

Re: はじめまして

- Haruhiko Okumura の投稿
そうか,メールに対してはurlencodeすればいいですね。でもファイル名に意味がある場合が多いので,併記するようにする必要がありそうですね。
Haruhiko Okumura への返信

実験してみました

- Tatsuya Shirai の投稿

 fs_moodleでの要約(?)メールの一部です.


SAMPLE -> フォーラム -> 一般フォーラム ->
メールの添付ファイルに空白文字を使えない問題のテスト
---------------------------------------------------------------------
メールの添付ファイルに空白文字を使えない問題のテスト
2008年 10月  19日(日曜日) 20:15 - 白井 達也
の投稿
---------------------------------------------------------------------
 ファイル名に空白を含むとどうなるか?

添付ファイル 半角の空白を 含むファイル.txt:
http://www.suzuka-ct.ac.jp/mech/moodle/file.php/42/moddata/forum/161/1815/%E5%8D%8A%E8%A7%92%E3%81%AE%E7%A9%BA%E7%99%BD%E3%82%92%20%E5%90%AB%E3%82%80%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB.txt
---------------------------------------------------------------------
これは ウェブサイト SAMPLE に投稿された記事のコピーです。


添付ファイルのファイル名と,その次の行に実際のURLを示していますね.
なお,URLがrawurlencodeされているのは,lib/filelib.phpのfunction get_file_url()に以下のような修正を加えているためです.

    if ($CFG->slasharguments) {
        $parts = explode('/', $path);
// (IE_Problem024): ここからコメントアウト
//
      $parts = array_map('rawurlencode', $parts);
// (IE_Problem024): ここから追加
        if (empty($noencodeurl)) $parts = array_map('rawurlencode', $parts);
// (IE_Problem024): ここまで追加
        $path  = implode('/', $parts);
        $ffurl = $url.'/'.$path;
        $separator = '?';
    } else {
// (IE_Problem023): IEで日本語ファイル名のファイルがダウンロードできない問題(2008/04/08)
// (IE_Problem023): ここからコメントアウト
//
      $path = rawurlencode('/'.$path);
// (IE_Problem023): ここから追加
        $parts = explode('/', $path);
// (IE_Problem024): ここから追加
        if (empty($noencodeurl)) $parts = array_map('rawurlencode', $parts);
// (IE_Problem024): ここまで追加
        $path  = '/'.implode('/', $parts);
// (IE_Problem023): ここまで追加
        $ffurl = $url.'?file='.$path;
        $separator = '&';
    }


 要約メールは,mod/forum/lib.phpのfunction forum_make_email_text()で作成され,添付ファイルに関する情報はfunction forum_print_attachments()の以下の部分(引き数$return が'text')です.

                if ($return == "html") {
                    $output .= "<a href=\"$ffurl\">$image</a> ";
                    $output .= "<a href=\"$ffurl\">$file</a><br />";

                } else if ($return == "text") {
                    $output .= "$strattachment $file:\n$ffurl\n";

                } else {

一応,ファイル名($file)とパス($ffurl)は併記されているようですので,パスはrawurlencodeされても大丈夫そうです.リンクをクリックするとブラウザが起動し,自動的にファイルのダウンロードが始まります.その際にきちんとファイル名はデコードされました(Firefox3の場合).

Haruhiko Okumura への返信

Re: はじめまして

- Motoyuki OHMORI の投稿
奥村先生、御返事ありがとうございます。

昔の Mac は / を使えたのですね。BSDベースのMacOS Xでも使えたりするのかちょっと気になってきました。そして、Linux / を使える様にされたのですか。。。さすがです。

添付ファイルの件は、なるほど、どうしようも無いですね。メーラを改造するしかないですね。
Motoyuki OHMORI への返信

Re: はじめまして

- Haruhiko Okumura の投稿
昔のMacはディレクトリのセパレータが : でしたので,今は / と : を内部でこっそり置き換えてくれているようです。だから / と : を両方含むとうまくいかないと思います。私のやったのも同じようなことでした。