「多言語対応:サーバの設定」の版間の差分

提供:MoodleDocs
移動先:案内検索
編集の要約なし
 
編集の要約なし
 
24行目: 24行目:
 IISがシフトJISに変換してしまう$_SERVER変数は,
 IISがシフトJISに変換してしまう$_SERVER変数は,


## $_SERVER['PATH_TRANSLATED']
<div>
## $_SERVER['REQUEST_URI']
$_SERVER['PATH_TRANSLATED']<br/>
## $_SERVER['URL']
$_SERVER['REQUEST_URI']<br/>
## $_SERVER['ORIG_PATH_INFO']
$_SERVER['URL']<br/>
## $_SERVER['PATH_INFO']
$_SERVER['ORIG_PATH_INFO']<br/>
 
$_SERVER['PATH_INFO']<br/>
です.これらをプログラム中の可能な限り早い段階でUTF-8に変換する必要があります.適当と思われる箇所は,lib/setup.phpかlib/<nowiki>setuplib.phpの冒頭です.以下のコードを追加することでUTF-8形式に戻すことが可能です.
</div>
 
$_SERVER['PATH_TRANSLATED']     = mb_convert_encoding($_SERVER['PATH_TRANSLATED'],      'UTF-8', 'auto');
$_SERVER['REQUEST_URI']         = mb_convert_encoding($_SERVER['REQUEST_URI'],          'UTF-8', 'auto');
$_SERVER['URL']                 = mb_convert_encoding($_SERVER['URL'],                  'UTF-8', 'auto');
$_SERVER['ORIG_PATH_INFO']       = mb_convert_encoding($_SERVER['ORIG_PATH_INFO'],      'UTF-8', 'auto');
$_SERVER['PATH_INFO']           = mb_convert_encoding($_SERVER['PATH_INFO'],            'UTF-8', 'auto');
$_SERVER['ORIG_PATH_TRA</nowiki>NSLATED'] = mb_convert_encoding($_SERVER['ORIG_PATH_TRANSLATED'], 'UTF-8', 'auto');


です.これらをプログラム中の可能な限り早い段階でUTF-8に変換する必要があります.適当と思われる箇所は,lib/setup.phpかlib/setuplib.phpの冒頭です.以下のコードを追加することでUTF-8形式に戻すことが可能です.


<div>
$_SERVER['PATH_TRANSLATED']      = mb_convert_encoding($_SERVER['PATH_TRANSLATED'],      'UTF-8', 'auto');<br/>
$_SERVER['REQUEST_URI']          = mb_convert_encoding($_SERVER['REQUEST_URI'],          'UTF-8', 'auto');<br/>
$_SERVER['URL']                  = mb_convert_encoding($_SERVER['URL'],                  'UTF-8', 'auto');<br/>
$_SERVER['ORIG_PATH_INFO']      = mb_convert_encoding($_SERVER['ORIG_PATH_INFO'],      'UTF-8', 'auto');<br/>
$_SERVER['PATH_INFO']            = mb_convert_encoding($_SERVER['PATH_INFO'],            'UTF-8', 'auto');<br/>
$_SERVER['ORIG_PATH_TRA</nowiki>NSLATED'] = mb_convert_encoding($_SERVER['ORIG_PATH_TRANSLATED'], 'UTF-8', 'auto');<br/>
</div>


[[Category:多言語対応|さーばのせってい]]
----[[多言語対応:はじめに|多言語対応トップに戻る]]
----[[多言語対応:はじめに|多言語対応トップに戻る]]
[[Category:多言語対応|さーばのせってい]]

2008年4月9日 (水) 09:06時点における最新版

Apacheの注意点

 執筆中

IIS(Internet Information Service)の注意点

 IISはマイクロソフト社製のWebサーバです. WindowsServer製品には標準でフルスペックのものがインストールされています. サーバOSではないWindows (2000, XP, Vista?)にも機能の制限されたものがパッケージに含まれています. 標準インストールでは導入されませんが,”プログラムの追加と削除”にて”Windowsコンポーネントの追加と削除”を行なうことでインストールできます.PHPはISAPI版をインストールして使用します. インストールの詳細については省略しますが,その際の注意事項を以下に記述します.

「ファイルの存在を確認する」はOff

 「コントロールパネル」-「管理ツール」-「インターネット インフォメーション サービス」を選択すると,IISの設定および操作のためのアプリケーションが起動します.画面左側に表示されるツリー表示の中から公開するWebページのルートフォルダを右クリックし,”プロパティ”を開いて下さい.表示されるウィンドウ中の”ホームディレクトリ”タブを選択して下さい.”アプリケーションの設定”の中の「構成(G)」と書かれたボタンをクリックして表示されるウィンドウの中の”マッピング”タブを開くと,拡張子と実行ファイルの関連付けの一覧表が表示されます.PHPのインストールが完了している場合,この一覧表の中の拡張子の欄に".php"と書かれた行があるはずです.この行を選択して,「編集(E)」ボタンを押して下さい.

 表示される「アプリケーションの拡張子マッピングの追加/編集」の中にある”ファイルの存在を確認する”というチェックボックスがチェックされている場合はチェックを外して下さい.IISにPHPをインストールする手順を紹介しているホームページの中にはこのチェックボックスをOnにするように指示しているもの,あるいは全く触れていないものがあります.このチェックボックスがOnですとMoodleのサイト管理メニューの中に存在する”スラッシュを使用する”をOn(デフォルト)の状態で使用する際に問題が発生します.

PATH_INFOが強制的にシフトJISに変換される問題

 Moodleの内部に踏み込んだ問題であり,ソースリストの編集権限を持たない方は対策できませんので管理者と相談して下さい.前述の「ファイルの存在を確認する」と同様に,”スラッシュを使用する”をOnとした場合に問題が発生します.具体的に言うと日本語文字を含むファイルをダウンロードできない現象が発生します.もしソースリストの修正を行なう権限が無いAdministratorの方は,このような問題が発生した場合,サイト管理メニュー中の”スラッシュを使用する”のチェックを外して(=Off)下さい.  以下に説明するソースリストの修正が必要かどうかはサーバの管理者と良く相談して下さい.インストールしたMoodleパッケージによっては既に対策済みかも知れません.ただし,この問題は日本版のIISにおいてのみ発生する現象であると予想されるため,moodle.orgで公開しているオリジナルパッケージで対策される可能性は極めて低いです.fs_moodleはfs_moodle2.4a以降,対策済みです.他の日本人によるMoodleパッケージはドキュメント等を読んで判断して下さい.  ”スラッシュを使用する”をOnにした場合にIISをサーバとするMoodleで日本語を含むファイルをダウンロードできない問題の根本的原因は日本版IISの仕様にあると推定されています.Moodleでは,クライアントPC側へファイルをダウンロードするための仕組みとしてfile.phpを多く用います.file.phpにファイル名の情報を付け加えたURLでfile.phpを呼び出しますが,”スラッシュを使用する”をOnにしている場合は,

http://www.yourserver.com/moodle/file.php/30/Storage/%E3%83%89%E3...%E9%A0%86.pdf

のように,/記号で区切られた形式でファイルの情報をブラウザからIISへ送ります.file.phpはこのファイルの情報を$_SERVER['PATH_INFO']より得ますが,日本版IISはUTF-8形式(上記の例では更にURLエンコード)で送られてきた情報を自動的にシフトJISコードに変換してしまいます.日本語URL等に対応するための処置に加えて,日本版WindowsのファイルシステムがシフトJIS形式であることに基づく仕様であると推測されます.その結果,UTF-8形式でファイル名が送られてきていると仮定しているMoodleは誤ったファイル名でファイルの有無を確認しようと試み,「申し訳ありません.ファイルが見つかりませんでした.」とエラーを返して来ます.  IISがシフトJISに変換してしまう$_SERVER変数は,

$_SERVER['PATH_TRANSLATED']
$_SERVER['REQUEST_URI']
$_SERVER['URL']
$_SERVER['ORIG_PATH_INFO']
$_SERVER['PATH_INFO']

です.これらをプログラム中の可能な限り早い段階でUTF-8に変換する必要があります.適当と思われる箇所は,lib/setup.phpかlib/setuplib.phpの冒頭です.以下のコードを追加することでUTF-8形式に戻すことが可能です.

$_SERVER['PATH_TRANSLATED'] = mb_convert_encoding($_SERVER['PATH_TRANSLATED'], 'UTF-8', 'auto');
$_SERVER['REQUEST_URI'] = mb_convert_encoding($_SERVER['REQUEST_URI'], 'UTF-8', 'auto');
$_SERVER['URL'] = mb_convert_encoding($_SERVER['URL'], 'UTF-8', 'auto');
$_SERVER['ORIG_PATH_INFO'] = mb_convert_encoding($_SERVER['ORIG_PATH_INFO'], 'UTF-8', 'auto');
$_SERVER['PATH_INFO'] = mb_convert_encoding($_SERVER['PATH_INFO'], 'UTF-8', 'auto');
$_SERVER['ORIG_PATH_TRA</nowiki>NSLATED'] = mb_convert_encoding($_SERVER['ORIG_PATH_TRANSLATED'], 'UTF-8', 'auto');


多言語対応トップに戻る