Debian GNU / PHP+PostgreSQL


Debian GNU

このページも編集禁止にだぁ〜! もうwikiじゃねーな :)

PHP+PostgreSQL

話が長くなるんでDebian GNUから独立して専用のページ作りました。「話が長くなる」つまり旨くいってないってことです。 :( 

基本的な事の押さえとして以下参照

  1. PHP
  2. PostgreSQL

PHP4

既にDebian GNU>2004.2.16でうpしてあるが、PHPのインスコは以下の通り。(多少はしょってます)でも下にあるようにいったん削除してPostgreSQLをインスコしたあとにまたインスコし直しています。

  1. ThinkPad?でsudo apt-get install php4を実行。インスコ始めてから何回か質問されるがかまわずyesとする。(いい加減)
  2. apacheを再起動させたがどうやらPHPが動作していない様子。PHPの動作確認を参考にテストしてみたら、やはりphpが動作してなかった :(
    そこで/etc/apache/httpd.confを以下の様に書き直す。
    # LoadModule php4_module /usr/lib/apache/1.3/libphp4.so
    行頭#をコメントアウト
    And for PHP 4.x, use:
      #
      #AddType application/x-httpd-php .php
      #AddType application/x-httpd-php-source .phps

    #AddType? application...の2行の行頭#をコメントアウト
    apacheをリスタートさせると...
    おぉ! 成功だ!

PostgreSQL

既にDebian GNU PHP+PostgreSQLにうpしてあるが、postgresqlのインスコは以下の通り(例によってはしょってたり追記してあったり)

インストール

ってことでとりあえず実験鯖=ThinkPad?にお手軽にapt-get install postgresqlで同時にpostgresql-clientもインスコされた。

どうやらここをみると順番的にはpostgresql>apache>phpってことで、しかもソースからコンパイルして云々しないと

PHP のコンパイル時には PostgreSQL のライブラリが必要だから

ってことらしい。漏れの鯖にはすでにphpがインスコされているが平気なのだろうか?

よくわからないからphp4を削除してから上記を実行した。
postgresqlのインスコ途中でencodingがどうのこうの聞かれるので

Enter default encoding (SQL_ASCII): EUC_JP

You have the following locales enabled in your system: ja_JP.eucjp

とした。するってーとdebianは下記の通りスーパーユーザー=posgtresのDirectoryやら何やら自動的に作ってくれて、インスコ後postgresqlサーバーを起動してくれますです。

The files belonging to this database system will be owned by user "postgres".
This user must also own the server process.

Fixing permissions on existing directory /var/lib/postgres/data... ok
creating directory /var/lib/postgres/data/base... ok
creating directory /var/lib/postgres/data/global... ok
creating directory /var/lib/postgres/data/pg_xlog... ok
creating directory /var/lib/postgres/data/pg_clog... ok
creating template1 database in /var/lib/postgres/data/base/1... ok
creating configuration files... ok
initializing pg_shadow... ok
enabling unlimited row size for system tables... ok
creating system views... ok
loading pg_description... ok
vacuuming database template1... ok
copying template1 to template0... ok

Success. You can now start the database server using:

念のためps auxで確認

postgres   586  0.0  2.9  9460 1812 pts/0    S    06:16   0:00 /usr/lib/postgresql/
postgres   588  0.0  2.9 10452 1792 pts/0    S    06:16   0:00 postgres: stats buff
postgres   590  0.0  2.9  9504 1828 pts/0    S    06:16   0:00 postgres: stats coll

設定&動作テスト

まずはsuでrootになってから

debian:/home/yasu# su - postgres
postgres@debian:~$  コレでpostgresqlのスーパーユーザになります。

次に一般ユーザーを作成。名前は何でも良いが一応UNIXユーザーと同一にします。

postgres@debian:~$ createuser
Enter name of user to add: yasu
Shall the new user be allowed to create databases? (y/n) y
  # DBの作成権限をユーザーyasuにも与えます。
Shall the new user be allowed to create more new users? (y/n) n
  # ユーザー作成権限は通常与えません。
CREATE USER

これでユーザー作成完了。一般ユーザーに戻ります.

postgres@debian:~$ exit postgres>root
logout
debian:/home/yasu# exit root>yasu
exit
yasu@debian:~$

続いてデータベースの作成。

yasu@debian:~$ createdb
CREATE DATABASE

引数を与えなければログインユーザー名のデータベースを作成します。ちゃんと作成されたか確認します。

yasu@debian:~$ psql -l
        List of databases
   Name    |  Owner   | Encoding
-----------+----------+----------
 template0 | postgres | EUC_JP
 template1 | postgres | EUC_JP
 yasu      | yasu     | EUC_JP
(3 rows)

データベースが作成されましたが中身は空のままなので、Apache + PHP + PostgreSQL laboratoryを参考にテーブルを作成してデータを入力します。

yasu@debian:~$ psql yasu
Welcome to psql, the PostgreSQL interactive terminal.

Type:  \copyright for distribution terms
       \h for help with SQL commands
       \? for help on internal slash commands
       \g or terminate with semicolon to execute query
       \q to quit

yasu=> create table meibo (
yasu(> name varchar(30) not null,
yasu(> age integer,
yasu(> address varchar(80));
CREATE

テーブルが作成できたのでデータを入力。

yasu=> insert into meibo values (
yasu(> 'yasu jota',
yasu(> 40,
yasu(> 'Tokyo dokoka 1-2-3');
INSERT 16561 1

入力したデータの確認

yasu=> select * from meibo;
   name    | age |      address
-----------+-----+--------------------
 yasu jota |  40 | Tokyo dokoka 1-2-3
(1 row)

ちゃんと入力されています。 [heart]

リモートからのアクセス

/etc/postgresql/pg_hba.confを編集してリモートからも受け付けるようにしておきます。

local        all                                           ident sameuser
host         all         127.0.0.1     255.0.0.0           ident sameuser
host         all         0.0.0.0       0.0.0.0             reject

local        all                                           trust sameuser
host         all         127.0.0.1     255.0.0.0           ident sameuser
host         all         192.168.1.0   255.255.255.0       trust sameuser
host         all         0.0.0.0       0.0.0.0             reject

とします。ここには

Windowsマシンからアクセスするには,別途libpq.dllが必要です

とありますがlibpq.dllって何でしょう?

  • http://www.nami73.com/download/psqlodbc.htmかな? WindowsクライアントからPostgreSQLサーバにGUIでアクセスできるみたい -- yasu 2004-03-16 (火) 16:37:07
  • ブラウザを通してPostgreSQLにアクセスする事に関しては必要ないようです。 -- yasu 2004-03-18 (木) 14:20:10

インストール php4-pgsql

PHP+PostgreSQLサーバ出来るようにするためにphp4-pgsqlをapt-get installします。

I see you have apache webserver installed and so far you haven't
used the apache module version of php4 in your apache. If you
want to use it, you should reconfigure the apache webserver and
select to load the php module. I can call the apacheconfig script
now for you to do it, or you can insert the following line into
/etc/apache/httpd.conf manually: 
LoadModule php4_module /usr/lib/apache/1.3/libphp4.so
Do you want me to run the apacheconfig script now [y/N] ? y
Finding DSO mods........................................found.

DebianがLoadModule? php4_module /usr/lib/apache/1.3/libphp4.soを/etc/apache/httpd.confに書き足してくれます。

Save these changes to the configuration files? [Y/n] Y

Rotated `/etc/apache/httpd.conf' at 2004年  3月 17日 水曜日 00:16:03 JST.
Restart Apache now? [Y/n] Y
Stopping apache with apachectl ... done.
Waiting for apache to terminate ... done.
/usr/sbin/apachectl start: httpd started

php4-pgsql (4.1.2-4) を設定しています ...
You are installing PostgreSQL support for php4, but it's not
enabled in your /etc/php4/apache/php.ini.

To enable it you need to add this line:

extension=pgsql.so

Do you want me to add it now [Y/n] ? PHPがPostgreSQLをenableにするためY

以上でphp4-pgsqlのインストールは終了。

まずはを/etc/apache/httpd.confを確認しましたが、LoadModule? php4_module /usr/lib/apache/1.3/libphp4.soは追記されていましたが、コメントアウトされてなかったので。

# LoadModule eaccess_module /usr/lib/apache/1.3/mod_eaccess.so
 LoadModule php4_module /usr/lib/apache/1.3/libphp4.so

としました。それからphp4に関係しそうな箇所AddType? application...の2行も以下のようにコメントアウトしました。

# And for PHP 4.x, use:
    #
    AddType application/x-httpd-php .php
    AddType application/x-httpd-php-source .phps

続いてextension=pgsql.soの確認。php4はまだインストールしていませんが、/etc/php4/apache/php.iniが作られています。中身を早速確認。PostgreSQLに関係しそうな箇所は

[PostgresSQL]
; Allow or prevent persistent links.
pgsql.allow_persistent = On
; Maximum number of persistent links.  -1 means no limit.
pgsql.max_persistent = -1

となっていました。そして一番最後に

extension=pgsql.so

が書き込まれています。/etc/php4/apache/php.iniでは「;」がコメントアウトを意味しているモノと思われ。

再度PHP4

続いてphp4のインスコ。

debian:/home/yasu# apt-get install php4
Reading Package Lists... Done
Building Dependency Tree... Done
Sorry, php4 is already the newest version.
0 packages upgraded, 0 newly installed, 0 to remove and 62  not upgraded.

あれ? どうやらphp4-pgsqlをインスコしたときに一緒にインストールされて様です。考えてみれば当たり前のことでphp4が無ければphp4-pgsqlが意味をなさないわけで、上記の通り/etc/php4/apache/php.iniが作られたわけです。まだまだ初心者の漏れ>笑ってやって下さい。 :d

debian:/home/yasu# dpkg -l 'php4'
要望=(U)不明/(I)インストール/(R)削除/(P)完全削除/(H)維持
| 状態=(N)無/(I)インストール済/(C)設定/(U)展開/(F)設定失敗/(H)半インストール
|/ エラー=(空欄)無/(H)維持/(R)要再インストール/X=両方(状態,エラーの大文字=異常)
||/ 名前           バージョン     説明
+++-==============-==============-============================================
ii  php4           4.1.2-6woody3  A server-side, HTML-embedded scripting langu

ちゃんとインスコされてますね。

php4動作確認

php4の動作テストはphpinfo。ソースは

<? phpinfo() ?>

と記述したファイルをphpinfo.phpとして/var/www/に保存して、念のためapacheを再起動させてからブラウザで確認します。

php4_pgsql.jpg

おぉ!成功のようです。どうやらPHPは機能しているようです。phpinfoにpgsqlがあればpgsqlも機能しているとのことで最後の方にはちゃんとpgsqlが表示されています。 [heart] 

以下Debian GNU/PHP+PostgreSQL/動作確認に続く。