日本語ファイル名がアップロードした時に文字化けします。 そのあとのリネームの操作もできない状況です。 バージョンは下記ですが、バージョンアップすれば直るのでしょうか、 ソースを見直さないといけないのでしょうか。 サーバ windows2003R2 WEBサーバ IIS6.0 moodle バージョン 1.9.2 database mysql バージョン 4.1.22 php バージョン 5.2.9
これは日本語Windows(Server含む)の仕様上の制限によるものです.
現状における対策は,(1)日本語を含むファイル名を一切使わない,(2)当方で公開しているfs_moodleを使う,の選択肢しかありません.(Moodle2.0で状況は少し好転します)
fs_moodleはオリジナルのMoodleを改良して日本語Windows上で日本語ファイル名とフォルダ名を使用可能としたパッケージです.本家に2~3週ほど遅れてバージョンアップしています.
当初は日本語Windowsへの対応だけを行っていたのですが,さまざまな改良や機能の拡張を繰り返してかなり独自性が強くなってきてしまいました.(便利になっているのですが)
fs_moodleの説明と配布はこちらのMoodleサイトで公開しています.ゲストでもログインできますのでご検討下さい.
はい,了解しました.
設定ファイルできめ細かく追加した機能の有効無効や初期値を決められる反面,「一体,こいつは何だ?」という設定も沢山あると思います.131項目もの修正のうち,余計なお世話な部分もあるのですが,必須とオプションの切り分けが私の中でもはっきりとできていませんでした.構想としては必須の修正のみを行ったpureなパッケージとフル機能のパッケージの二つを公開したいと思っているのですが...
少なくともMoodle1.8とMoodle1.9はサポートを続けますし,Moodle2.0も調査を続けています(Moodle2.0自体が全く未完成なのでこちらも作業を進められない).私に何か重大なことが起こらない限りはサポートを続けますのでご安心下さい.
あまりHTMLファイルをファイルの領域にアップロードしたことが無かったので試してみました.
[リソースの追加]で[ファイルまたはウェブサイトにリンクする]で開くリソースの設定画面で,[ファイルを選択またはアップロードする]を選択すると,ファイル以下のフォルダ構造が表示されます.先にアップロードしたindex.htmlファイルを選択して,名称を入力し,[保存してコースに戻る]でコース上にindex.htmlへの”ファイルのリソースへのリンク”が作成されます.これをクリックするとindex.htmlページが表示されました.
当方はOSがWindowsServerではなくWindowsXPですのでIISとは挙動が違うかも知れません.
あ,表示されたindex.htmページ内の相対リンクの話ですね.どうだろう.
アップロードしたndex.htmlのファイルを見てみると,
<A href="GroupWatcher/index.html">スケジュール管理 (GroupWatcher)</A>
このような相対パスなのに,表示されたWebページ(index.html)のリンク先は,
http://www.suzuka-ct.ac.jp/mech/moodle/file.php/42/GroupWatcher/index.html
と表示されます.凄い! きちんとfile.phpを介して静的なページを表示するようにアドレスを変換していますね.この部分は私は手を入れた記憶は(多分)ありません.
同じように,HTMLファイルの中で相対パスで表されているリンク先が,リソースとしてMoodleによって表示された後に,リンクがどのように変わっているか教えて頂けませんか? IISならではの特殊事情があるかも知れません.
#なお,私がアップロードしたindex.htmlページはシフトJISで記述されていました.fs_moodleのお節介機能により,このindex.htmlファイルをMoodle上で編集([ファイル]で”編集”を選ぶ)すると,自動的にコードをシフトJISからUTF-8に変換してくれます.そうすると,charset=と不一致が起こるので,そのまま保存するとおかしくなるかも知れません.その場合はcharaset=をUTF-8に変えるのが無難ですね.(すみません,この部分は蛇足です)
例えば、
「ファイル」の中に
index.html
folder/test.html
を入れておき、[リソースの追加]でindex.htmlのアップロードをすると、
以下のようなアドレスになります。(コースのIDが5の場合)
http://localhost/moodle/file.php?file=%2F5%2Findex.html
そこから、相対パスで記述されたリンク先(folder/test.html)へいこうとすると、
http://localhost/moodle/folder/test.html
を指しており、file.php?file=%2F5%2Fの部分が抜けてしまいます。
> #なお,私がアップロードしたindex.htmlページはシフトJISで記述されていました.fs_moodleのお節介機能により,このindex.htmlファイルをMoodle上で編集([ファイル]で”編集”を選ぶ)すると,自動的にコードをシフトJISからUTF-8に変換してくれます.そうすると,charset=と不一致が起こるので,そのまま保存するとおかしくなるかも知れません.その場合はcharaset=をUTF-8に変えるのが無難ですね.(すみません,この部分は蛇足です)
オリジナルのMoodleでは、そもそもcharaset=shift_JISで書くと編集できないので、
ユーザの先生には取り敢えず全部UTF-8に変更してアップロードしてもらったため、その点は大丈夫そうです。
#ただ、既存のHTMLファイルを全部書き換えることに関してはかなり、渋々という様子でしたが。
> http://localhost/moodle/file.php?file=%2F5%2Findex.html
このアドレス表示は正しいと思うのですが,気になるのは(1)file=形式と,(2) %2F5%2FのURLエンコードされている点ですね.どちらかが自動的なURL変換を阻害している可能性があります.(2)が怪しいと思うのですが,まずは(1)を試してみましょう.
[サイト管理]-[サーバ]-[HTTP]の管理画面中の”スラッシュを使用する”がNoに設定されていますよね?(デフォルトはYes) 何らかの理由があってNoに設定したのであろうと思いますが,一時的にNoに設定して試して頂けないでしょうか? もしそれで(%2F5%2Fであっても)相対パスがfile.phpを介する形式に置き換わるようであれば,バグの可能性があります.
なるほど.Apacheですとどちらの形式でもファイルアクセス可能ですが,IISの場合は制限があるのですね.
ちなみに当方はApacheを使用しているのですが,”スラッシュを使用する”をNoにしたところ,似たような状況(htdocsを基準とした相対パス)になりました.ちょっとバグっぽいですね.
fs_moodleを利用する前(まだfs_moodleを導入していませんよね?)で発生するならば,これはMoodleの問題となりそうです.ちょっとだけ調査したのですが,まだ肝心のURLを書き換えるコードが発見できていません.どこだろう...mod/resource/type/fileの下だと思うのですが...それともfile.phpかな?
大きな勘違いをしていました.
表示されたHTMLページのソースを表示させてみたところ,相対アドレスで記述されている<a>タグのアドレスは何も手を加えられていませんでした.オリジナルのままです.この事実と”スラシュを使用する”をNoに設定すると正常に動作しなくなる,この2点から考えると,”スラッシュを使用する”をYesに指定していると結果的に相対パスがうまく機能していた,という結論になりました.スラッシュを使用する場合,URLはたとえば,
http://www.suzuka-ct.ac.jp/mech/moodle/file.php/42/index.html
です.カレントパス(という表現が正しいのか分かりません)は,
http://www.suzuka-ct.ac.jp/mech/moodle/file.php/42/
ですので,そこから示される相対アドレスGroupWatcher/index.htmlは,
http://www.suzuka-ct.ac.jp/mech/moodle/file.php/42/GroupWatcher/index.html
と装飾されるのでOK.ところが,"スラッシュを使用する"をNoとした場合は,
http://www.suzuka-ct.ac.jp/mech/moodle/file.php?file=/42/index.html
のアドレス指定でリソースのHTMLファイルを開きますので,カレントパスは,
http://www.suzuka-ct.ac.jp/mech/moodle/
となります.ここから相対アドレスGroupWatcher/index.htmlを指定すると,
http://www.suzuka-ct.ac.jp/mech/moodle/GroupWatcher/index.html
このようなアドレスになってしまい,ファイルが存在しないとなるのは当然のことです.
仕組みは分かりました.(仕組み:特にない)
解決策は,
- IIS環境でも”スラッシュを使用する”をYesにできるようにする
- アドレスをすべて絶対アドレス指定する
- (どうすれば良いのか分かりませんが)カレントパスをコースのファイルの位置に移動する
ですね.
そういえばKagoさんの所もIISを使用していましたよね? ”スラッシュを使用する”をYesにできます?
#当方も近日中にIIS(WindowsServer2008)をデバッグ用に立ち上げる予定ですが,まだまだ時間が掛かりそうです.
ご承知のこととは思いますが,念のために補足します.
2のアドレスをすべて絶対アドレス指定するですが,moodledata以下のフォルダをIISでアクセス可能にするのは危険(moddataやbackupdataなどの情報が外部に漏れる恐れがある)です.どこか全く別のフォルダをIIS経由で公開可能として,そちらに先生方のHTMLファイル群を移動し,その絶対パスをリソースとして指定するという意味です.各HTMLファイル内のリンクのアドレスは現状どおりの相対パスで大丈夫ですよね.
このHTMLファイルを全く別の場所に公開する方法ですと,その公開フォルダにファイルをアップロード(FTPなど)する権限を誰に与えるのか,といった管理上の問題がありますが,一番,確実な方法でしょう.Moodleを介さずにアクセスできては困るという条件があるならば,なんらかの仕組みを考える必要はありますが.
3のカレントパスをコースのファイルの位置に移動するですが,ちょっと調べた範囲では難しそうです.moodledata以下のファイルへアクセスするには必ずfile.phpを介さなくてはならないので,全ての<a>タグへのアクセス時にhttp://www.suzuka-ct.ac.jp/mech/moodle/file.php?file=/42/を頭に付ける必要があります.Javascriptで実現できるかも知れないと思ったのですが,副作用が多そうです.たとえばindex.htmlから呼ばれたその先のHTMLファイルにもその効果を継承できたとして,では今度,普通の*.phpにアクセスする際には解除して...などなど.
私もこの議論の詳細をあまり覚えていないのですが,無関係ではないかも知れません.
ご一読下さい.
http://moodle.org/mod/forum/discuss.php?d=94176
こちらは日本語ファイル名が問題になっていました.なんとかIISで”スラッシュの使用”をYesに設定できると良いですね.
私も時間ができましたらもう一度,目を通しておきます.
”スラッシュを使用する”状態でブラウザからサーバに渡されるURLはファイルの実体にパラメータを付与した文字列ですので、そのようなページは実際には存在しません(その代わり、これをURLと勘違いさせて動的なページの出力結果をProxyサーバに静的なページと同様にキャッシュさせようという仕組みですね)。ですので、実際にファイルの存在を確認されては困る。
”ファイルの存在を確認する”のチェックボックスを外すことでIISで”スラッシュを使用する”をYesに設定することができれば、あとはIISでもコースフォルダ内のHTMLファイルに相対アドレス(file.php/...)でアクセスできるようになると思います。お試し下さい。
fs_moodleでは日本版IIS固有の致命的な問題を一つ解決済みです。是非ともご活用下さい。
いろいろとどうもありがとうございます。
http://moodle.org/mod/forum/discuss.php?d=9757
http://moodle.org/mod/forum/discuss.php?d=13910
実は上記のトピックは既に拝見しまして、IISの.phpのアプリケーションマッピングの「ファイルの存在を確認する」のオン・オフは試しておりました。
しかし、これのオン・オフを変えても「スラッシュを使用する」のYes/Noの挙動は変化しません。
この相対参照の不具合が直るかどうかは不明であったとしても、日本語ファイルの取り扱いの対処はしたいので、fs_moodleの導入はする方向で進めたいと思っております。
IIS上でslashargumentsをオンにしておくと、アップロードしたファイルがNot Foundになる件は、FAQにも載っており、slashargumentsを変更する(オンからオフに変える)と、相対リンクが使用できないとの記述がありました。
http://docs.moodle.org/ja/インストールFAQ
「アップロードしたファイルへのアクセスまたは閲覧するときに、いつも「File not Found」というメッセージが表示されます」
http://docs.moodle.org/en/Installation_FAQ
Uploaded files give "File not found"
#英語の方がより詳細に書いてあります。
ちなみに、health.phpを見ると、添付のような画面が表示されましたが、実際は、
cgi.fix_pathinfo=1
AllowPathInfoForScriptMappingsはDisable、
PHPは5.2.9
になっており、提示された解決方法では解決されませんでした。
結果的には、doc_rootをコメントアウトしたら、slasharguments=yesで正常に動作するように(相対リンクもOK)なりましたので、ご報告します。
説明不足、失礼しました。
これは、php.iniの中のPaths and Directories あたりにある設定です。doc_rootは「IIS以外のWebサーバのもとでCGIとしてPHPを実行する際に指定するべきもの」で、デフォルトはNULLなのに、うっかりApacheベースで書かれた設定例などを参考に書き換えてしまったのが悪かったようです。
ちゃんとコメント文の内容を理解しないで設定するとこういうことになってしまうのですね。
今回は、英語のサイトで、IISユーザが「SCORMのパッケージでエラーが発生する」と、当方と同じような症状が出ていて、参考にしました。
http://moodle.org/mod/forum/discuss.php?d=109026
調べてみると、結構同じミスをしている人がたくさんいるようでした
少々古いPetr Škoda (skodak) さんの投稿ですが、ご参考まで。
[Re: How to get Slashargs = file.php/pic.jpg to work with PHP/IIS]
http://moodle.org/mod/forum/discuss.php?d=9757&parent=102032