mac leopard php mysql apache

Mac OS X Leopardphp から MySQL に接続するまで!

環境

MacOSX 10.5.6
PHP 5.2.6
MySQL 5.0.75
Apache 2.2.9

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 に設定する必要がある。

macphp.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
                                          • +
4 rows in set (0.00 sec)

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
                                  • +
1 row in set (0.00 sec)

作成したテーブルのフィールド定義を確認してみる。

 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ファイルを作成し、hogeデータベースに接続出来るかテストしてみる。

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」テーブルに保存されています。

できた^^