Windows で安定した Moodle 環境を構築する(というか,したい)
WWWサーバ の選択
- AN HTTPDでPHP5を動かす (いとさん,PHP4 の記述 も)
-
AN HTTPD は中田昭雄さんが公開している Windows 用の簡易な HTTP サーバ。
PHP は ISAPI [e-Words] と CGI の2つの起動方法があり,AN HTTPD でも両方が使える。CGI は php-cgi.exe で動作させるが,呼び出されるたびにスレッドが立つのでオーバーヘッドが大きい。よりスマートな起動方法は ISAPI (php5isapi.dll) だが,安定していないといわれている (いとさんによれば,初めて動作させる PHP スクリプトは一度 CGI で動作させ,確認してから ISAPI に切り替えるのがよいらしい)。
- Apache HTTP サーバ でPHP5を動かす場合
-
Apache 2.2.x 系列は,API の変更により,PHP のモジュールは組み込めないようになっている。したがって,PHP 5.1.x に含まれるライブラリ php5apache2.dll や php4apache2.dll は,現在のバージョン (5.1.6) では使用できない (The requested operation was failed. というエラーが出る。ログには「固有のエラー」と出るだけでエラーの詳細は記録されない)。Apache 2.0.x 系の最新版 2.0.59 + PHP 5.1.6 で動作が確認できた。 (PHP-users の投稿。関連リンクあり。)
Windows XP 上でのテスト用には,XAMPP [Moodle Documentation] を使って手軽に環境を構築するのも手。以下は2006年9月11日現在公開されているバージョンに含まれていたソフトウエア (Moodle 1.6):
- MySQL 5.0.21 (Community Edition, Ver 14.12, Distrib. 5.0.21, for Win32)
- Apache 2.2.2 (built: May 9, 2006)
- PHP 5.1.4 (built: May 4, 2006)
- Moodle 1.6.1+ (built: May 5, 2006)
当然だが,本格稼動にはセキュリティなどの条件をクリアする必要がある。
- XAMPP 公式ページ
- XAMPP 版 Moodle ダウンロード
- Windows XP 上で動かす Moodle (Moodle Documentation)
- XAMPP インストールガイド (Moodle Documentation)
Windows 上での MySQL がらみのトラブル
MySQLForge Wiki の「PHP FAQ」に Windows に頻出するトラブル "Call to undefined function mysqli_connect()" の解説と解法紹介がありました。
Check the output of phpinfo() for "Configuration file (php.ini) Path". This is the php.ini file which PHP will use. If there is no such entry, either that you have no php.ini file, or PHP cannot find in any of the location listed above.
実際に phpinfo() の結果を見てみると,Configuration File (php.ini) Path のところに php.ini がなく,代わりに C:\WINDOWS など,ディレクトリまでのパスが表記されていることがあります。この場合,php.ini を PHP のインストールフォルダ c:\php から c:\WINDOWS に移動させ,WWW サーバを再起動すると mysqli がうまく働きます。
PHP の install.txt には,確かに以下のような記述があります (インストールの章にある説明はこれだけなので,ちょっと分かりにくいですが)。
PHP searches for php.ini in the locations described in the Section called The configuration file in Chapter 5 section.
install.txt の第5章を見ると,php.ini は以下の順番で検索されるとのこと (上記 MySQL のサイトでも引用されています):
php.ini is searched in these locations (in order):
- SAPI module specific location (PHPIniDir directive in Apache 2, -c command line option in CGI and CLI, php_ini parameter in NSAPI, PHP_INI_PATH environment variable in THTTPD)
- HKEY_LOCAL_MACHINE\SOFTWARE\PHP\IniFilePath (Windows Registry location)
- HKEY_LOCAL_MACHINE\SOFTWARE\PHP\IniFilePath (Windows Registry location)
- The PHPRC environment variable
- Current working directory (for CLI)
- The web server's directory (for SAPI modules), or directory of PHP (otherwise in Windows)
- Windows directory (C:\windows or C:\winnt) (for Windows), or --with-config-file-path compile time option
Apache の場合には,php.ini の場所を PHPIniDir 変数を使って設定することができます。
PHPIniDir "C:/php"
なお,MySQL のクライアントライブラリ libmysql.dll は,ファイルを検索すると複数個所に見つかることがあります。古いバージョンが見つかったら,新しいものに置き換えておく必要があるかもしれません (特に古い MySQL,PHP を使っていた場合)。
- MySQL Connector/PHP: 最新のクライアントライブラリを使ったビルドがダウンロードできる。
- MySQL 用関数の解説 (PHP マニュアル)
Windows 上で 複数のバージョンの Moodle を動作させる
テスト目的で2つ以上のバージョンのMoodleを同一のコンピュータ上で動作させることがあります (例えば,バージョンアップのために教材を変換する時など)。Windows で Moodle のタスク管理を行なう cron.php を定期実行に実行するための moodle-cron-for-windows.zip パッケージ の「Moodle Cron」サービス [Moodle 日本語ドキュメント] を使っている場合,複数の Moodle に対して定期実行するよう,サービスの設定を変更する必要があります。以下はその方法です。
- それぞれの Moodle 上にある cron.php が正しく動作するかどうかをチェックする。
Moodle の cron.php を動作させる 

- Moodle Cron のレジストリを変更する。[スタート]→[ファイル名を指定して実行]から「regedit」を起動し,[HKEY_LOCAL_MACHINE]→[SOFTWARE]→[Moodle]→[Sites]を開く。「編集」メニューから「新規」→「文字列値」を指定して,名前に半角数字 (既にあるものと重ならないもの),値に稼動させたい cron.php の URL を指定する。
- Moodle Cron を再起動する。「マイコンピュータ」を右クリックして「管理」メニューを開き,「サービスとアプリケーション」→「サービス」で「Moodle Cron」を選択して再起動する。
なお,Moodle が認証情報の一部にクッキー cookie を用いる関係で,同じブラウザで複数の Moodle を起動させ,同一のユーザでログインするとセッションエラーが発生します。
これを防ぐには,Moodle ごとに異なる cookie を使うよう,サイトの設定の「クッキー接頭辞 sessioncookie」を適宜変更します。Moodle 1.5, 1.6 では「設定」→「詳細設定」の「オペレーティングシステム」に,Moodle 1.7 であれば「サーバ」→「セッションハンドリング」にあります (以下の画像は Moodle 1.7 のもの)。
変更後は一時的にユーザアカウントが正しく動作しなくなりますが,(必要ならば一旦ログアウトして) 再度ログインすれば直ります。