3
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

PHPのmodule_pgsqlとmodule_pdo_pgsqlのバージョンをpsqlと合わせた話

Posted at

AmazonLinuxでPHP5.6とpostgresqlのモジュールをインストールしてみたのですが、8.4系で古い。。。

<h2><a name="module_pdo_pgsql">pdo_pgsql</a></h2>
<table>
<tr class="h"><th>PDO Driver for PostgreSQL</th><th>enabled</th></tr>
<tr><td class="e">PostgreSQL(libpq) Version </td><td class="v">8.4.20 </td></tr>

・・・

<h2><a name="module_pgsql">pgsql</a></h2>
<table>
<tr class="h"><th>PostgreSQL Support</th><th>enabled</th></tr>
<tr><td class="e">PostgreSQL(libpq) Version </td><td class="v">8.4.20 </td></tr>

実際にはPostgreSQL9.4.4を使いたいので上記も9.4.4に合わせるよにした時のメモ。

参考

やること

そもそもPHPのextensionの話などよくわかってなかったのですが、以下がすごい分かりやすかったです。

[PHP]pecl,phpize,extensionという単語を見て頭痛がするあなたへの処方箋

今回は上記のCで書かれたライブラリの設定を行って.soを作る必要があり、要はビルドします。(もし、ビルドせずにやる方法をご存知の方がいらっしゃれば教えていただけるとありがたいです。)

環境

  • Amazon Linux AMI 2015.03.1

また、以前書いた記事のnginx、PHP5.6のインストール及びPHP-fpmでの接続までを実施した状態とします。

AmazonLinuxにnginx+PHP5.6+PHP-fpm+PHP-redis環境を作る

準備

Cのビルドをするのでそれ用の色々(gccなど)をまとめてインストールします。

$sudo yum groupinstall "Development Tools"

次に今回のやりたい要件(PostgreSQLのモジュールのインストール)のために必要なモジュールをインストールします。

$sudo yum install php-pear php56-devel postgresql94.x86_64 postgresql94-devel.x86_64

また、あとで.soは置き換えますが、PHPのpostgresqlモジュールはインストールしておきます。(iniファイルの作成だけ予め行っておくために。iniファイルを自分で変更する場合には実施不要)

$sudo yum install php56-pgsql.x86_64

module_pgsqlのインストール

module_pgsqlはPHPの本体に入っているようなので現在インストールしているPHPのソースコードを取得します。(本例では5.6.12)

$wget --trust-server-names http://jp2.php.net/get/php-5.6.12.tar.gz/from/this/mirror

解凍後、ビルドします。

$tar -zxvf php-5.6.12.tar.gz
$cd php-5.6.12/ext/pgsql/
$phpize
$./configure
$make
$make test
$sudo make install

上記によって.soの置きかわりが実施されています。
次にサービス再起動。

$sudo service nginx stop
$sudo service php-fpm stop
$sudo service php-fpm start
$sudo service nginx start
$wget http://localhost/phpinfo.php

結果が変わってました。

<h2><a name="module_pgsql">pgsql</a></h2>
<table>
<tr class="h"><th>PostgreSQL Support</th><th>enabled</th></tr>
<tr><td class="e">PostgreSQL(libpq) Version </td><td class="v">9.4.4 </td></tr>

pod_pgsqlのインストール

やってみます。
pod_pgsqlのソースコードもPHP本体にあるので先ほどダウンロードしたものを利用します。

$cd php-5.6.12/ext/pod_pgsql/
$phpize
$./configure
・・・
configure: error: Cannot find php_pdo_driver.h.
ERROR: `/var/tmp/PDO_PGSQL/configure' failed

!?

エラーになります。。。ただし、findするとphp_pdo_driver.hは存在します。。

$sudo find / -name  php_pdo_driver.h
/usr/include/php-zts/5.6/php/ext/pdo/php_pdo_driver.h
/usr/include/php/5.6/php/ext/pdo/php_pdo_driver.h

configureをみて見ます。以下抜粋。

  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for PDO includes" >&5
$as_echo_n "checking for PDO includes... " >&6; }
if ${pdo_cv_inc_path+:} false; then :
  $as_echo_n "(cached) " >&6
else

    { $as_echo "$as_me:${as_lineno-$LINENO}: checking for PDO includes" >&5
$as_echo_n "checking for PDO includes... " >&6; }
    if test -f $abs_srcdir/include/php/ext/pdo/php_pdo_driver.h; then
      pdo_cv_inc_path=$abs_srcdir/ext
    elif test -f $abs_srcdir/ext/pdo/php_pdo_driver.h; then
      pdo_cv_inc_path=$abs_srcdir/ext
    elif test -f $prefix/include/php/ext/pdo/php_pdo_driver.h; then
      pdo_cv_inc_path=$prefix/include/php/ext
    fi

fi
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $pdo_cv_inc_path" >&5
$as_echo "$pdo_cv_inc_path" >&6; }
  if test -n "$pdo_cv_inc_path"; then
:
  else
as_fn_error $? "Cannot find php_pdo_driver.h." "$LINENO" 5
  fi

ここでエラーになっているっぽい。以下のような似た記事もありました。

PHP5.3.2のpdo_mysqlインストールで少しハマったところメモ

上記のように/usr/include/phpでから見えるようにするためにシンボリックリンクを貼ります。

$sudo ln -s /usr/include/php/5.6/php/ext /usr/include/php/ext
$sudo ln -s /usr/include/php/5.6/php/include /usr/include/php/include
$sudo ln -s /usr/include/php/5.6/php/main /usr/include/php/main
$sudo ln -s /usr/include/php/5.6/php/sapi /usr/include/php/sapi
$sudo ln -s /usr/include/php/5.6/php/TSRM /usr/include/php/TSRM
$sudo ln -s /usr/include/php/5.6/php/Zend /usr/include/php/Zend

これで無事configureが通るようになりました。
このままインストールまでします。

$./configure
$make
$make test
$sudo make install

これでpdo_pgsql.soが置き換わったはずなので確認してみます。

$sudo service nginx stop
$sudo service php-fpm stop
$sudo service php-fpm start
$sudo service nginx start
$wget http://localhost/phpinfo.php

以下のように9.44になっていました。

<h2><a name="module_pdo_pgsql">pdo_pgsql</a></h2>
<table>
<tr class="h"><th>PDO Driver for PostgreSQL</th><th>enabled</th></tr>
<tr><td class="e">PostgreSQL(libpq) Version </td><td class="v">9.4.4 </td></tr>

テストしてみる

本当にDBに接続出来るかスクリプトを作成して確認してみます。RDSでPostgreSQLを作成し、値は各自設定状態に合わせておいて下さい。

/var/www/connect.php
<?php
$dsn = 'pgsql:dbname={dbname} host={host} port=5432';
$user = '{user}';
$password = '{password}';

try{
    $dbh = new PDO($dsn, $user, $password);

    print('OK!!!!<br>');
}catch (PDOException $e){
    print('Error:'.$e->getMessage());
    die();
}
?>

これでアクセスしてみます。

$curl http://localhost/connect.php
OK!!!!<br>

大丈夫のようです!

3
4
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?