mac leopard php mysql apache
Mac OS X Leopard で php から MySQL に接続するまで!
apacheの設定
mac では webサーバ(Apache)は「システム環境設定 > 共有」の「web共有」をチェックすれば起動するようになっている。
ただしデフォルトのままでは php を使えないので設定する。
ターミナルを起動してhttpd.confを編集する。
$ sudo vim /private/etc/apache2/httpd.conf
以下の部分のコメントアウトを削除する(115行目あたり)
#LoadModule php5_module libexec/apache2/libphp5.so
↑この「#」を削除
※httpd.confは修正する前に一応バックアップをとっておいた方がいいかも。
httpd.confを保存したらapacheを再起動する。
「システム環境設定 > 共有」の「web共有」のチェックが入っていたら一回チェックをはずしてチェック入れる。入っていなかったらチェックする。
もしくはターミナルから
$ sudo apachectl -k graceful
でもいい。
phpの設定
phpからMySQLにつながるようにソケットのパスを php.ini に設定する必要がある。
macの php.ini は /private/etc/php.ini.default ファイルを /private/etc/php.ini と別名保存して使用する。
まずコピー。
$ sudo cp /private/etc/php.ini.default /private/etc/php.ini
コピーして出来た php.ini を編集する。
760行目あたりに
; Default socket name for local MySQL connects. If empty, uses the built-in ; MySQL defaults. mysql.default_socket =
とあるので MySQL の socketファイルのパスを指定する。
MacPortsで入れたmysql5のsocketファイルは、
/opt/local/var/run/mysql5/mysqld.sock
というパスにあるのでこれを指定する。
$ sudo vim /private/etc/php.ini ; Default socket name for local MySQL connects. If empty, uses the built-in ; MySQL defaults. mysql.default_socket = /opt/local/var/run/mysql5/mysqld.sock
これで php.ini の設定はおわり。
接続テスト用にDBを作成
MySQLモニタにログイン
$ mysql5 -u root -p Enter password: rootユーザーのパスワードを入力 Welcome to the MySQL monitor. Commands end with ; or \g. Your MySQL connection id is 13 Server version: 5.0.75 Source distribution Type 'help;' or '\h' for help. Type '\c' to clear the buffer. mysql>
適当な名前でデータベースを作成する。
今回は「hoge」という名前でデータベースを作成。
mysql> create database hoge; Query OK, 1 row affected (0.00 sec)
データベースが作成されているか確認。
mysql> show databases;
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- +
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
Database |
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- +
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
information_schema | |
hoge | |
mysql | |
test |
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- +
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
「hoge」という名前のデータベースが出来ている。
「hoge」データベースにテーブルを作成するために「hoge」データベースを選択する。
mysql> use hoge; Database changed
「name」カラムと「age」カラムを持つ「users」テーブルを作成。
mysql> create table users (name char(20), age int); Query OK, 0 rows affected (0.01 sec)
作成したテーブルを確認してみる。
mysql> show tables;
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- +
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
Tables_in_hoge |
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- +
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
users |
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- +
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
作成したテーブルのフィールド定義を確認してみる。
mysql> show fields from users; +-------+----------+------+-----+---------+-------+ | Field | Type | Null | Key | Default | Extra | +-------+----------+------+-----+---------+-------+ | name | char(20) | YES | | NULL | | | age | int(11) | YES | | NULL | | +-------+----------+------+-----+---------+-------+ 2 rows in set (0.00 sec)
php から MySQL に接続出来るか確かめる。
phpからMySQLに接続するためにphpファイルを作成する。
<?php $db_host = 'localhost'; $db_user = 'root'; $db_passwd = 'MySQLのrootユーザパスワード'; $db_name = 'hoge'; $db = mysql_connect($db_host, $db_user, $db_passwd) or die('mysqlへの接続に失敗しました' . mysql_error()); mysql_select_db($db_name, $db); $sql = 'insert into users values ("名前", 10);'; mysql_query($sql, $db) or die('クエリの送信に失敗しました' . mysql_error()); ?> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> <meta http-equiv="Content-Language" content="ja" /> <title>php mysql test <?php $sql = 'select * from users;'; $result = mysql_query($sql, $db); while ($row = mysql_fetch_array($result, MYSQL_ASSOC)) { printf("name: %s age: %s", $row['name'], $row['age']); } mysql_close($db) or die('mysqlの切断に失敗しました' . mysql_error()); ?>
上記のファイルを「/Users/ユーザー名/Sites」ディレクトリに「index.php」という名前で保存する。
ブラウザで「http://192.168.1.2/~ユーザー名/」にアクセスする。
※apacheが起動していること。
上のキャプチャのように表示されれば成功!
MySQLも確認してみる。
mysql> select * from users; +--------+------+ | name | age | +--------+------+ | 名前 | 10 | +--------+------+ 1 row in set (0.00 sec)
ちゃんと「users」テーブルに保存されています。
できた^^