fs_moodleで日本語ファイル名が表示できない

fs_moodleで日本語ファイル名が表示できない

- taka nori の投稿
返信数: 12
fs_moodle3.13.01(20090605)をWindows2003サーバで使用しています。

[環境]

OS : Windows2003 server
Apache/2.0.63 (Win32) PHP/5.2.6 mod_auth_sspi/1.0.4
PHP Version 5.2.6
MySQL 5.0.51a

mbstringの設定は、.htaccessで以下の設定にしてあります。
php_value default_charset UTF-8
php_value mbstring.language Japanese
php_value mbstring.internal_encoding UTF-8
php_value mbstring.http_input pass
php_value mbstring.http_output UTF-8
php_value mbstring.detect_order auto
php_value mbstring.substitute_character none
php_value mbstring.func_overload 0
php_flag mbstring.encoding_translation on


メール送信など日本語で問題なく使用できていますが、ファイルのアップロードで日本語が使用できず
困っています。

日本語部分が「_」になってしまい、リネームもできません。
※添付画像:_38-01_.txt~_asa_.doc
試しにFilezillaでサーバにアクセスし、ファイル名を日本語にすると日本語は表示されます。
※添付画像:商標登録情報_2.xls

何か設定がおかしいのでしょうか?
fs_moodleの設定表示も確認したのですが、特に問題点が分かりませんでした。

ご教示、お願いいたします。
添付 sample2.png
taka nori への返信

Re: fs_moodleで日本語ファイル名が表示できない

- Tatsuya Shirai の投稿

はて,不思議ですね.
もしUTF-8のまま書き込もうとしたのであれば,もっと変な文字に化けるものなのですけれども.

//  (4) [カッコなど,moodleで使用を認めていない記号(a-zA-Z0-9,-,_以外の文字)もファイル名として使用可能とする]
//  安全である保障はありませんので,不安な方はfalseを選択して下さい.
    $fsCFG->USEextChars = true;
//  $fsCFG->USEextChars = false;

こちらの設定はtrueになっているでしょうか? 以前はこれがfalseでも半角の英記号以外は影響を受けなかったのですが,もしかしたら近頃は改変されて(そういえば先日,改変されていた気がします),これをtrueにしないと日本語も通れなくなってしまったのかも知れません.こちらもこれから試して見ます.

Tatsuya Shirai への返信

Re: fs_moodleで日本語ファイル名が表示できない

- Tatsuya Shirai の投稿

この設定は関係無さそうですね.

Tatsuya Shirai への返信

Re: fs_moodleで日本語ファイル名が表示できない

- Tatsuya Shirai の投稿

 なお,Filezilaで変更した日本語のファイル名は,WindowsServer上のエクスプローラで見ても普通に表示可能ですか?(つまりシフトJISかどうか)

 PHPの設定は当方の設定とほぼ同じでしたので大丈夫だと思います.多少は,WindowsServer固有の問題が存在する可能性は否定できないのですが...(当方のWindowsServerは立ち上げ準備のまま放置されているので確認できていません).

 ”_”に置換される処理がどこで行われているのかを切り分けるために,Moodle経由でフォルダの作成を試して頂け無いでしょうか.アップロード時だけおかしいのか,どうか,です.また,表示できた日本語のファイルの名前をMoodleの”ファイル”上でリネームできたでしょうか?

 "_"に置換する処理は,()などの半角英記号を使っている場合にMoodleが修正します.

 今回,日本語ファイルが"_"に化けてしまったファイル名が何らかの特例を満たしている可能性は否定できません.特定のファイル名のみおかしい,のでしょうか.

 あと,以前はうまく日本語のファイル名のファイルのアップロードやフォルダの作成などができたのに,fs_moodleをアップデートしたらNGになるようになったのか,などなど.

Tatsuya Shirai への返信

Re: fs_moodleで日本語ファイル名が表示できない

- taka nori の投稿
Tatsuya Shiraiさん
コメントありがとうございます。

FileZillaで変更したファイル名は、WindowsServer上のエクスプローラで普通に表示されます。
そこで、moodle上で日本語で表示されているファイル名をリネーム※1すると、日本語部分が「_」になります。
※1リネームをクリックし、文字変更せずにそのまま「リネーム」クリック

また、moodle上でフォルダの作成をしたところ、日本語部分は「_」になってしまうことを確認しました。
色々試してみましたが、特定のファイル名で起こっているようではなく、日本語全てがそのようになってしまいます。

moodleは、新規でfs_moodleで構築しています。
別に構築したmoodle(1.9.5)(※fs_moodleではない)でも同様の問題がでています。

Apacheの設定など関係ありますでしょうか?


taka nori への返信

Re: fs_moodleで日本語ファイル名が表示できない

- Tatsuya Shirai の投稿

 moodledata/tempにdummyという名前のフォルダを作成し,その下に'A日本語'と'B日本語'という二つのフォルダを作成するテスト用のスクリプトを作成しました.これをmoodleのconfig.phpとfsconfig.phpの存在するフォルダにコピーし,Webブラウザ経由で実行してみて下さい.

 実験が終わったら,このdummyフォルダごと削除して構いません.

Tatsuya Shirai への返信

Re: fs_moodleで日本語ファイル名が表示できない

- Tatsuya Shirai の投稿

これが当方の環境で実行した実行結果です.

最後の2行と同じ名前のフォルダがmoodledata/temp/dummyに作成されています.(エクスプローラで確認)

添付 fs_test.jpg
Tatsuya Shirai への返信

Re: fs_moodleで日本語ファイル名が表示できない

- taka nori の投稿
テストスクリプトを実行しました。
エクスプローラで確認し、それぞれのフォルダ名が
・A譌・譛ャ隱
・B日本語
になっていました。

実行結果の画面を添付します。

$fsCFG->USEextCharsは""です.の""内に何も入ってないのが気になります…
添付 sample3.gif
taka nori への返信

Re: fs_moodleで日本語ファイル名が表示できない

- taka nori の投稿
その後、fsconfig.phpの$fsCFG->USEextCharsをtrueにすることで"1"となりました。
が、日本語の表示に関しては改善しませんでした…。
taka nori への返信

Re: fs_moodleで日本語ファイル名が表示できない

- Tatsuya Shirai の投稿

 なるほど,この関数レベルではfs_moodleの仕組みは何も問題無く動作しますね.
 もっと上位のレベルですね.
 これは...意外とApacheの設定かも知れませんね.

 WebブラウザでPUTやGETで渡されたマルチバイトのパラメータが_に化けるメカニズムがMoodle側か,Apache側か分かりませんが.あ,ちなみにApacheがインストールしてあるけれども,実際にはIISがクライアントとのやり取りを行っていた,ということは無いですよね(無いと思いますが,念のために).

Tatsuya Shirai への返信

Re: fs_moodleで日本語ファイル名が表示できない

- Tatsuya Shirai の投稿

 一つ確認です.
 クライアントのWebブラウザはIE,Firefoxともに試されたでしょうか?
 もしIEのみの場合,添付画像に示すインターネットオプションの詳細設定,インターナショナル,”UTF-8のURLを送信する”はチェックされているでしょうか?

IEの場合はIEのバージョン(6,7,8)もお知らせ頂けると助かります.

添付 InternetOptions.jpg
Tatsuya Shirai への返信

Re: fs_moodleで日本語ファイル名が表示できない

- Tatsuya Shirai の投稿

あー! 多分,これでしょう.

config.phpに,

$CFG->unicodecleanfilename = true;

を追加していないのではないでしょうか?

これが設定されていないと,lib/moodlelib.phpの中のfunction clean_filename()で,

    if (empty($CFG->unicodecleanfilename)) {
        $textlib = textlib_get_instance();
        $string = $textlib->specialtoascii($string);
        $string = preg_replace('/[^\.a-zA-Z\d\_-]/','_', $string ); // only allowed chars
    } else {

こうですもの.これでしょう.

”fs_moodleの設定表示”のページにこのチェックも高いプライオリティで追加しておきましょう.日本語を通す場合はこの設定は必須です.

Tatsuya Shirai への返信

Re: fs_moodleで日本語ファイル名が表示できない

- taka nori の投稿
あああ!ありがとうございますっ!!
ご指摘の通り、$CFG->unicodecleanfilename = true;の追加をしていませんでした。

早速、$CFG->unicodecleanfilename = true;を追加したところ、無事日本語が通るようになりました。

こんなに早く解決できて、感謝感激です!

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