2008/04/13

さくらインターネットでpdo_mysql

カテゴリー: プログラミング — admin @ 16:40:38

環境:

  • さくらインターネットのレンタルサーバー
  • PHPバージョン5
  • MySQL4.x
  • Zend Frameworkを利用してデータベースに接続したい

さくらのレンタルサーバでZendを動かそうとしたら、なんとpdo_mysqlがインストールされていないじゃないか...

色々とネットを検索し回った結果、「MySQLドライバ用のZend_Db_Adapter」というものを発見、早速インストールしてみることに(Using Zend Framework Without PDO)。一応、動く事を確認し、データベースにも接続はできた、しかし、やっぱりPDOを使いたい(T.T)...ならPECLでモジュールをインストールしちゃえ!!! 実際、こういったモジュールやら何やらどこまで勝手にインストールしていいのか分らないが、サーバ上でアクセス拒否されるまではなんでも良しと言い聞かせてしまえ~...

まずはPECLを確認しよう:

%pecl
pecl: Command not found.

なるほど、見つからないのか。

では、探し出して見よう:

%pear config-show
Configuration (channel pear.php.net):
=====================================
Auto-discover new Channels     auto_discover
Default Channel                default_channel  pear.php.net
HTTP Proxy Server Address      http_proxy
PEAR server [DEPRECATED]       master_server    pear.php.net
Default Channel Mirror         preferred_mirror pear.php.net
Remote Configuration File      remote_config
PEAR executables directory     bin_dir          /usr/local/php-4.4.8/bin
PEAR documentation directory   doc_dir          /usr/local/php-4.4.8/lib/php/doc
PHP extension directory        ext_dir          /usr/local/php-4.4.8/lib/php/extensions/no-debug-non-zts-20020429
PEAR directory                 php_dir          /usr/local/php-4.4.8/lib/php
PEAR Installer cache directory cache_dir        /tmp/pear/cache
PEAR data directory            data_dir         /usr/local/php-4.4.8/lib/php/data
PEAR Installer download        download_dir     /tmp/pear/download
directory
PHP CLI/CGI binary             php_bin          /usr/local/php-4.4.8/bin/php
php.ini location               php_ini
PEAR Installer temp directory  temp_dir         /tmp/pear/temp
PEAR test directory            test_dir         /usr/local/php-4.4.8/lib/php/test
Cache TimeToLive               cache_ttl        3600
Preferred Package State        preferred_state  stable
Unix file mask                 umask            22
Debug Log Level                verbose          1
PEAR password (for             password
maintainers)
Signature Handling Program     sig_bin          /usr/local/bin/gpg
Signature Key Directory        sig_keydir       /usr/local/php-4.4.8/etc/pearkeys
Signature Key Id               sig_keyid
Package Signature Type         sig_type         gpg
PEAR username (for             username
maintainers)
User Configuration File        Filename         /home/hoge/.pearrc
System Configuration File      Filename         /usr/local/php-4.4.8/etc/pear.conf

あれ?サーバ設定画面ではPHPは5に設定してあるのにパスには4が入っているじゃないか。とりあえず、phpinfo();でパス情報を調べてみよう。なるほど、PHP5のパスはこれだ「/usr/local/php-5.2.5」

とりあえず、今のセッションでぱすを追加しよう:

%setenv PATH /usr/local/php-5.2.5/bin:$PATH
%which pear
/usr/local/php-5.2.5/bin/pear

これでpearはバージョン5になった。念のために確認をしよう:

%pear config-show
Configuration (channel pear.php.net):
=====================================
Auto-discover new Channels     auto_discover
Default Channel                default_channel  pear.php.net
HTTP Proxy Server Address      http_proxy
PEAR server [DEPRECATED]       master_server    pear.php.net
Default Channel Mirror         preferred_mirror pear.php.net
Remote Configuration File      remote_config
PEAR executables directory     bin_dir          /usr/local/php-5.2.5/bin
PEAR documentation directory   doc_dir          /usr/local/php-5.2.5/lib/php/doc
PHP extension directory        ext_dir          /usr/local/php-5.2.5/lib/php/extensions/no-debug-non-zts-20060613
PEAR directory                 php_dir          /usr/local/php-5.2.5/lib/php
PEAR Installer cache directory cache_dir        /tmp/pear/cache
PEAR data directory            data_dir         /usr/local/php-5.2.5/lib/php/data
PEAR Installer download        download_dir     /tmp/pear/cache
directory
PHP CLI/CGI binary             php_bin          /usr/local/php-5.2.5/bin/php
php.ini location               php_ini
PEAR Installer temp directory  temp_dir         /tmp/pear/temp
PEAR test directory            test_dir         /usr/local/php-5.2.5/lib/php/test
Cache TimeToLive               cache_ttl        3600
Preferred Package State        preferred_state  stable
Unix file mask                 umask            22
Debug Log Level                verbose          1
PEAR password (for             password
maintainers)
Signature Handling Program     sig_bin          /usr/local/bin/gpg
Signature Key Directory        sig_keydir       /usr/local/php-5.2.5/etc/pearkeys
Signature Key Id               sig_keyid
Package Signature Type         sig_type         gpg
PEAR username (for             username
maintainers)
User Configuration File        Filename         /home/hoge/.pearrc
System Configuration File      Filename         /usr/local/php-5.2.5/etc/pear.conf

ここでようやくpeclに戻るが、さっきの環境設定でパスに入っているのでチェック:

%which pecl
/usr/local/php-5.2.5/bin/pecl

さてここからはPECLでPDO_MYSQLおインストール準備に入ろう。さくらインターネットではautoconfとautoheaderに変な数字が後ろに付いているからコマンドでautoconfを入力してからタブを叩きコマンド名を探し出そう。サーバ、時期によってはコマンド名が異なるかもしれないから注意。autoconfとautoheaderを見つけたら環境変数に追加しよう。

%setenv PHP_AUTOCONF autoconf259
%setenv PHP_AUTOHEADER autoheader259

次にPECLでPDOモジュールを探そう。

%pecl search pdo
Retrieving data...0%....50%....Matched packages, channel pecl.php.net:
=======================================
Package      Stable/(Latest) Local
PDO          1.0.3 (stable)        PHP Data Objects Interface
PDO_DBLIB    1.0 (stable)          FreeTDS/Sybase/MSSQL driver for PDO
PDO_FIREBIRD 0.2 (beta)            Firebird/InterBase 6 driver for PDO
PDO_IBM      1.2.4 (stable)        PDO driver for IBM databases
PDO_INFORMIX 1.2.0 (stable)        PDO driver for IBM Informix INFORMIX databases
PDO_MYSQL    1.0.2 (stable)        MySQL driver for PDO
PDO_OCI      1.0 (stable)          Oracle Call Interface driver for PDO
PDO_ODBC     1.0.1 (stable)        ODBC v3 Interface driver for PDO
PDO_PGSQL    1.0.2 (stable)        PostgreSQL driver for PDO
PDO_SQLITE   1.0.1 (stable)        SQLite v3 Interface driver for PDO
pdo_user     0.3.0 (beta)          Userspace driver for PDO

今回インストールをしたいのはPDO_MYSQL、早速、落してコンパイルをしよう。

%pecl bundle PDO_MYSQL
downloading PDO_MYSQL-1.0.2.tgz ...
Starting to download PDO_MYSQL-1.0.2.tgz (14,778 bytes)
.....done: 14,778 bytes
Package ready at '/home/hoge/PDO_MYSQL'
%cd PDO_MYSQL
%phpize
Configuring for:
PHP Api Version:         20041225
Zend Module Api No:      20060613
Zend Extension Api No:   220060519
%./configure
%make

makeにエラーが出ていなかったらモジュールを適当な場所に保管しよう。

%mkdir -p ~/lib/php
%cp modules/pdo_mysql.so ~/lib/php

最後にphp.iniにextensionを保管している場所とロードするextensionを定義してあげよう。

extension_dir = /home/hoge/lib/php
extension=pdo_mysql.so

phpinfo();で確認を取ると嬉しいことにPDO_MYSQLがロードされているじゃないか!もちろん、これでZendのデータベース接続もうまくいったぞ。