Windows - FUN Moodle

日本語Windowsとモバイル機器に強い
fs_moodleパッケージの紹介
Introduce of fs_moodle package
鈴鹿工業高等専門学校 機械工学科
(Suzuka National College of Technology,
Mechanical Engineering)
白井 達也 (Tatsuya SHIRAI)
[email protected]
fs_moodle(エフエス・ムードル)とは?
日本語Windows OSが抱える
File System の問題点(仕様)を
解決するための仕組み
(fsconverter.phpからスタート)
もう少しだけ詳しく,fs_moodleの仕組みを解説
本校で2007年2月に
三重大学の奥村教授がMoodleに関する講演を行なう.
研究室で使うグループウェアを
探し続けていたところなので,
早速,部屋に戻ってから情報収集,
そのまま一気にインストール(できてしまった)
余剰のPC
(Compaq DeskProEN, PentiumⅢ866MHz,
30GB HDD, 386MB RAM, Windows2000)
非常に遅いが,一応,動作した.
OSは
Linux,Mac OS, Windows が利用可能!
♪
なのだが!
Windows(WindowsServer含む)は確かにOKなのだが,
日本語Windows
(日本語WindowsServer含む)には
致命的な問題点のあることが,
「使ってみてから判明」
「あ,それは仕様です」
名前に日本語を含む
ファイルやフォルダが
使えない!
議事録20081114.doc
二分法.c
予算割り当て.xls
ロボット工学その1.ppt
「Web上で日本語のファイル名を使うのは
御法度でしょ,そんなの常識,常識」
そんなことはない!
利用者にお願い強制など不可能!
(注) Linux, Mac OSならば問題なし
Why?
ファイルシステムの違いです
Linux, Mac OS
UTF-8に対応できる
自由でシンプルなシステム
日本語Windows
マルチバイトはShift JISを前提
(NTFS:内部ではUTF-16)
Unicode
多言語の文字を単一の文字コードで取り扱うために
1980年代に提唱
当初は16bit → Unicode2.0から21ビットに拡張.
(16bitの領域)
基本多言語面(BMP: Basic Multilingual Plane)
最も使われる基本的な文字・記号がほとんど含まれる.
(実用的にUnicode≒16ビットのBMP)
UTF-8/16はUnicodeの文字符号化方式の名称
(Unicode Transformation Format)
Unicode (UTF-8)
Unicode(主に16ビット)を
1~3バイトで表す可変長の符号化法
• 頭1ビットが0であれば1バイト長
• 頭3ビットが110であれば2バイト長の先頭バイト
• 頭4ビットが1110であれば3バイト長の先頭バイト
• 頭2ビットが10であれば2バイト長以上の2バイト目以降
であることが容易に判別可能.
ASCII文字列 → UTF-8(1バイト)は完全に同一
→ 日本語文字化けの主要因!(海外製ソフトウェア)
日本語文字は必ず3バイトを要する.
MoodleはUTF-8に対応済み (見落し有り...)
Moodleを介したファイルのやり取りは...
•(PDFなどの)配布用ファイル
•フォーラムの添付ファイル
•電子メールの添付ファイル
•提出課題の提出物
などなど.
管理者はともかく,
教師,学生に
半角英数字しか使っちゃだめ!
とは言えない
実際,不便ですし...
具体例(コースファイル)
Explorer (on Windows)
123
TEST1
実践工業数学
123
半角はOK
全角も全てが化ける訳ではない
TEST1
実践工業数学参考文献.txt
Explorer (on Windows)
Moodle (PHP)
「このデータを
“表1.doc”(E8 A1 A8 EF BC 91 2E 64 6F 63 :UTF-8)
という名前で保存して」
日本語
「OK.
“陦イ・・doc” (E8 A1 A8 EF BC 91 2E 64 6F 63 :S-JIS?)
ん? 変な名前だな.」
具体例(コースファイル)
Explorer (on Windows)
正しい例 (Moodle → fs_moodle)
表
1
. d o
c
UTF-8
E8 A1 A8 EF BC 91 2E 64 6F 63
(S-JIS)
陦 イ
・
・
d o c
UTF-16 96 66 FF 69 30 FB 30 FB 00 64 00 6F 00 63
陦 イ
・
・
d o c
(S-JIS)
E8 A1 A8 81 45 81 45 64 6F 63
UTF-8
表
(?) E (?) E d o c
つまり日本語Windowsは...
アプリケーションから渡されたファイル名の文字コードが
ASCII文字(7bit)ではない場合
シフトJIS(CP932)のハズだ!と
勝手に思い込んでしまう
ならば...
それに対して,fs_moodleは...
ファイル名をUTF-8から
シフトJISに変換してから渡してあげよう
(妥協)
Moodleソースリスト中のファイルI/O関数を
独自の関数でオーバーライド
(UTF-8 ←→ シフトJIS)
(膨大な数...やりました)
md5_file()
chmod()
mkdir()
copy()
fs関数:各関数名の頭に fs_
move_uploaded_file()
file()
opendir()
file_exists()
readdir()
file_get_contents()
各関数はファイル名を
readfile()
file_put_contents()
UTF-8←→シフトJIS変換
rename()
filectime()
rmdir()
filemtime()
scandir()
filesize()
例) file_exists(), unlink()
sha1_file()
filetype()
unlink()
fopen()
getimagesize()
function send_temp_file_finished($path) {
imagecreatefromgif()
// (FS_CONVERTER): ここから
imagecreatefromjpg()
// if (file_exists($path)) {
imagecreatefrompng()
imagecreatefromwbmp()
if (fs_file_exists($path)) {
imagecreatefromxbm()
//
@unlink($path);
imagecreatefromxpm()
@fs_unlink($path);
is_dir()
is_executable()
// (FS_CONVERTER): ここまで
is_file()
is_readable()
is_uploaded_file()
}
}
Moodle (UTF-8)
fs_moodle (UTF-8)
表1.doc
表1.doc
fs関数
PHP
ファイルI/O関数
日本語
Windows
HDD
(UTF-16)
PHP
日本語
Windows
HDD
(UTF-16)
ファイルI/O関数
Moodle (UTF-8)
fs_moodle (UTF-8)
表1.doc
表1.doc
UTF-8
↓
S-JIS
PHP
日本語
Windows
S-JIS
↓
UTF-16
ファイルI/O関数
表1.doc
陦ィ・・doc
HDD
(UTF-16)
fs関数
ファイルI/O関数
PHP
日本語
Windows
S-JIS
↓
UTF-16
表1.doc
表1.doc
HDD
(UTF-16)
Moodle (UTF-8)
fs_moodle (UTF-8)
表1.doc
表1.doc
UTF-8
↓
S-JIS
PHP
日本語
Windows
S-JIS
↓
UTF-16
ファイルI/O関数
表1.doc
陦ィ・・doc
HDD
(UTF-16)
陦ィ・・doc
fs関数
ファイルI/O関数
PHP
日本語
Windows
S-JIS
↓
UTF-16
表1.doc
表1.doc
HDD
(UTF-16)
表1.doc