環境:
- さくらインターネットのレンタルサーバー
- 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のデータベース接続もうまくいったぞ。