Moodle環境の構築
奈良の案件は、短期でのプロト開発つまりガンガン書けることという要件があり、私のスキルでは無理という判断で流れた。eラーニングシステムを構築するための候補として、Moodle(ムードル)の利用が挙げられており、その環境を事前調査していた矢先であった。せっかくなので調査した情報をメモしておく。PHPは、今回初めて使ってみたが、結構完成度は高かった。
Moodle環境の環境は、以下で構成される。IISを選択した。
■ IIS 5.1 (推奨はApache 2.2.3)
■ PHP 5.2.5 (推奨はPHP 5.2.0)
■ MySQL 5.0.19 (推奨は5.0.27、最新は5.0.51)
□ MySQL GUI Tools 5.0-r12
■ phpMyAdmin 2.11.4 (推奨はphpMyAdmin: 2.10.1)
■ Moodle 1.8.4 (推奨はMoodle 1.8.2以降)
これらのディレクトリ構成は以下のようになる。これをベースに環境構築の手順を整理しておく。
c:/ +-- Inetpub/ | +-- moodledata/ | +-- wwwroot/ | +-- moodle/ | | +-- □install.php | | +-- □index.php | | +-- lang/ | | +-- ja_utf8/ # うまく機能せず | +-- phpMyAdmin/ | | +-- ■config.inc.php # 適宜作成 | +-- ■phpinfo.php # 適宜作成 | +-- ■mysql-connect-test.php # 適宜作成 +-- mysql/ | +-- ■my.ini # 要編集 | +-- tools/ # MySQL GUI Tools +-- php/ | +-- ext/ | +-- php_mysql.dll | +-- php_mysqli.dll | +-- php_pdo.dll | +-- php_pdo_mysqli.dll +-- windows/ +-- ■php.ini # 要編集 +-- system32/ +-- libmysql.dllなど
【1】MySQLにMoodle用のDBを作成
①Moodle用のDBを作成する
$ mysql -uroot mysql > CREATE DATABASE moodle DEFAULT CHARACTER SET utf8 COLLATE utf8_unicode_ci; > GRANT SELECT,INSERT,UPDATE,DELETE,CREATE,DROP,INDEX,ALTER ON moodle.* TO moodleuser@localhost IDENTIFIED BY 'moodleuser'; > GRANT SELECT,INSERT,UPDATE,DELETE,CREATE, CREATE TEMPORARY TABLES,DROP,INDEX,ALTER ON moodle.* TO moodleuser@localhost IDENTIFIED BY 'moodleuser'; > flush privileges;
一応パスワードも設定しておく。Moodleは文字化けの問題が多いのでutf8_unicode_ciの設定を確実にしておく。作成したDB「moodle」はテーブルを空にしておく。
② PHPからの接続確認用のテーブルも作成しておく。DB「test」などに作成する。
> use moodle; > show tables; # PHPからの接続確認用のテーブルを作成しておく > use test; > create table dummy (id int(5) default '0' not null, name varchar(32) not null); > insert into dummy (id,name) values (123, 'hachi'); > insert into dummy (id,name) values (45, 'nana'); > select * from dummy; > exit;
【2】PHPを確認
① PHPのインストール、IISへの設定は省略。その後、以下の1行のphpinfo.phpを作成し、c:\Inetpub\wwwrootに置く。
<?php phpinfo(); ?>
② http://localhost/phpinfo.phpで確認する。
Trouble-1:Apacheサービスを停止させないとIISのサービスが開始されない状況になった。詳細は不明。Apacheサービスを停止後、World Wide Web Publishingを再起動すること。
【3】PHPからMySQLに接続確認
① C:\windows\php.iniを編集してMySQL対応部分のコメントを外しておくこと。利用するモジュールだけでよいが4つとも活かしておいてよい。
extension=php_mysql.dll extension=php_mysqli.dll extension=php_pdo.dll extension=php_pdo_mysql.dll
PEARライブラリのDBクラスもインストールする場合は、c:\php の go-pear.bat を実行し、コマンドラインで② mysql-connect-test.phpを以下のように作成し、c:\Inetpub\wwwrootに置く。Host,User,Password,DBNameは適宜。php_mysqli.dllを利用しているが、php_mysql.dllでもよい。「i」を外す。を実行する。PHPには、以前からのMySQL対応のmysql関数群と、改良版拡張サポートであるmysqli関数群がある。またDB接続の負荷を軽減させるためのラッパーがpdo関数群である。pdoは、MySQL,PostgreSQL,SQL Server,Sybase,DB2,Oracleなどの多くのデータベースに対応されている。
pear install DB
<?php $dbHost = "localhost"; $dbUser = "root"; $dbPass = ""; $dbName = "test"; $conn = mysqli_connect($dbHost, $dbUser, $dbPass); mysqli_query($conn,"set names sjis"); mysqli_select_db($conn, $dbName) or die("データベース" . $dbName . "への接続に失敗した"); $sql = "select id,name from dummy"; $result = mysqli_query($conn, $sql) or die("データの読み込みに失敗した:\n " . mysqli_error($conn)); ?> <html> <head><title>PHPとMySQLの接続確認</title></head> <body> <font size= "+2">PHPからMySQLへの接続を確認するテスト</font><br/> <font color="blue"> host = <?php print "$dbHost" ?><br/> user = <?php print "$dbUser" ?><br/> dbname = <?php print "$dbName" ?><br/> </font> <TABLE border="1" cellspacing=0 cellpadding=2 width="260"> <TBODY> <TR bgcolor="#cccccc"> <TH width="20"></TH> <TH width="80">id</TH> <TH width="160">name</TH> </TR> <?php $cnt = 0; while ($row = mysqli_fetch_array($result)){ $cnt = $cnt + 1; print "<TR>"; print "<TD width=\"20\">$cnt</TD>"; print "<TD width=\"80\">$row[0]</TD>"; print "<TD width=\"160\">$row[1]</TD>"; print "</TR>"; } ?> </TBODY> </TABLE> </body> </html>
③ http://localhost/mysql-connect-test.phpで確認する。
Trouble-1: 「Fatal error: Call to undefined function mysqli_connect() in xxx.php」が出た。php.iniのextension_dirの設定がおかしかった。
extension_dir = "c:/php/ext"
Trouble-2: 「Warning: mysqli_connect(): Host 'xxxx' is not allowed to connect to this MySQL server in xxx.php 」が出た。$dbHostの設定がおかしかった。以下のどれか。省略されるとphp.iniのmysql.default_hostやmysqli.default_hostに設定された値を参照にいく。$dbHost = "localhost" $dbHost = "127.0.0.1" $dbHost = "" # 省略するとphp.iniの値を参照
Trouble-3: 「データの読み込みに失敗しました: Incorrect information in file: '.\test\dummy.frm'」が出た。テーブルが壊れていたので、テーブルをdropし、あらためてcreate table、データのinsertを行った。むやみにMySQL Server Instance Config Wizardを繰り返したためかも。
【4】Moodleのインストール
① http://docs.moodle.org/ からダウンロードしておく。ドキュメントは http://docs.moodle.org/ja/ から。ユーザー登録が必要。
② ダウンロードしたzipを展開して、c:\Inetpub\wwwroot\moodle に置く。
③ install.phpを起動する。http://localhost/moodle/install.php からインストーラを起動する。最初に言語選択のダイアログがあるが、「en」のままで進めるのが無難。「ja_utf8」では文字化けする。
Trouble-1: 「unicode is required to be installed/enabled. It is required that you store all your data in Unicode format (UTF-8). New installations must be performed into databases that have their default character set as Unicode. If you are upgrading, you should perform the UTF-8 migration process (see the Admin page).」が出ると次に進めない。「xxx is recommended to be installed/enabled」のwarningレベルなら進めてよい。④ MySQLにテーブルを作成する時間が結構かかる。DB「moodle」には、mdl_xxxxというprefixのテーブルが185個生成されていた。
http://download.moodle.org/lang16/ から ja_utf8.zip をダウンロードし、展開してmoodle/langディレクトリの中に入れる。moodle/langにはデフォルトではenとen-utf8しかない。
⑤ Moodleに教材作成のための環境を定義する。(これ以降の詳細はまだ未確認。文字化けにも対応できていない。)
【5】phpMyAdminの利用
① PHPからMySQLを管理するツールの利用が推奨されている。http://www.phpmyadmin.net/home_page/downloads.php から phpMyAdmin-2.11.4-all-languages.zip をダウンロードし展開。c:\mysql\toolsに配置してみた。
② config.inc.phpを以下のように編集する。config.sample.inc.phpをコピーしてリネームしてから編集する。
$cfg['PmaAbsoluteUri'] = 'http://localhost/phpMyAdmin/'; $cfg['Servers'][$i]['host'] = 'localhost'; $cfg['Servers'][$i]['port'] = '3306'; $cfg['Servers'][$i]['extension'] = 'mysql'; $cfg['Servers'][$i]['user'] = 'root'; $cfg['Servers'][$i]['password'] = ''; $cfg['DefaultLang'] = 'ja';
③ http://localhost/phpMyAdmin/index.php で利用できる。