OSS Fan ~OSSでLinuxサーバ構築~

作成日: 2014/08/10

OSSでLinuxサーバ構築

PHPでPostgreSQLへ接続するためのApache設定

トップページOSSでLinuxサーバ構築 > PHPでPostgreSQLへ接続するためのApache設定
このエントリーをはてなブックマークに追加

構成

解説

 PHPのプログラムではSQLでデータベースを操作することで、動的なページを生成することができます。 PHPで操作可能なデータベースはMySQLやPostgreSQL、SQLiteなど様々です。 ただしそのためには操作対象のデータベースに応じたPHPモジュールを導入する必要があります。

 今回はApache上で動作するPHPのプログラムからPostgreSQLのデータベースを操作するための設定を行います。 CentOS 6.5にApacheをインストールし、PHPの実行環境を整備します。 LinuxのインストールはCentOS 6.5 x86_64 インストールに従ってインストールしています。 PostgreSQLはセットアップ済みで既に存在している前提とします。

サーバ構成

OSバージョン

CentOS 6.5 x86_64

パッケージ一覧

httpd-2.2.15-29.el6.centos.x86_64.rpm
php-common-5.3.3-26.el6.x86_64.rpm
php-cli-5.3.3-26.el6.x86_64.rpm
php-5.3.3-26.el6.x86_64.rpm
php-pdo-5.3.3-26.el6.x86_64.rpm
php-pgsql-5.3.3-26.el6.x86_64.rpm
php-mbstring-5.3.3-26.el6.x86_64.rpm

クライアント構成

OSバージョン

Windows 7 Ultimate 64bit

ソフトウェア一覧

Firefox 31.0

サーバ構築

インストール

 必要なパッケージをCentOS 6.5のDVDメディアから6つインストールします。 CentOS 6.5 x86_64 インストールに従ってLinuxをインストールした場合、 「httpd-2.2.15-29.el6.centos.x86_64.rpm」は初期状態でインストール済みとなっています。 DVDドライブにCentOS 6.5のDVD-ROMの1枚目をセットし、以下のコマンドを実行します。

# mount /dev/cdrom /media/cdrom
# cd /media/cdrom/Packages/
# rpm -qa | grep httpd
httpd-2.2.15-29.el6.centos.x86_64
httpd-tools-2.2.15-29.el6.centos.x86_64
# rpm -ihv php-common-5.3.3-26.el6.x86_64.rpm
準備中...                ########################################### [100%]
   1:php-common             ########################################### [100%]
# rpm -ihv php-cli-5.3.3-26.el6.x86_64.rpm
準備中...                ########################################### [100%]
   1:php-cli                ########################################### [100%]
# rpm -ihv php-5.3.3-26.el6.x86_64.rpm
準備中...                ########################################### [100%]
   1:php                    ########################################### [100%]
# rpm -ihv php-pdo-5.3.3-26.el6.x86_64.rpm
準備中...                ########################################### [100%]
   1:php-pdo                ########################################### [100%]
# rpm -ihv php-pgsql-5.3.3-26.el6.x86_64.rpm
準備中...                ########################################### [100%]
   1:php-pgsql              ########################################### [100%]
# cd /
# umount /media/cdrom

 CentOS 6.5のDVD-ROM 1枚目を取り出して、2枚目に入れ替え、以下のコマンドを実行します。

# mount /dev/cdrom /media/cdrom
# cd /media/cdrom/Packages/
# rpm -ihv php-mbstring-5.3.3-26.el6.x86_64.rpm
準備中...                ########################################### [100%]
   1:php-mbstring           ########################################### [100%]
# cd /
# umount /media/cdrom

設定

(1) Apache設定ファイルの編集

 viエディタでApacheの設定ファイル(httpd.conf)を編集します。

# cd /etc/httpd/conf/
# vi httpd.conf
ファイル名:/etc/httpd/conf/httpd.conf
※初期状態でコメントアウトされている行は表示を省略しています。※
※赤字が修正箇所です※
### Section 1: Global Environment

ServerTokens Prod
ServerRoot "/etc/httpd"
PidFile run/httpd.pid
Timeout 60
KeepAlive Off
MaxKeepAliveRequests 100
KeepAliveTimeout 15
<IfModule prefork.c>
StartServers       8
MinSpareServers    5
MaxSpareServers   20
ServerLimit      256
MaxClients       256
MaxRequestsPerChild  4000
</IfModule>
<IfModule worker.c>
StartServers         4
MaxClients         300
MinSpareThreads     25
MaxSpareThreads     75
ThreadsPerChild     25
MaxRequestsPerChild  0
</IfModule>
Listen 80
#LoadModule auth_basic_module modules/mod_auth_basic.so
#LoadModule auth_digest_module modules/mod_auth_digest.so
#LoadModule authn_file_module modules/mod_authn_file.so
#LoadModule authn_alias_module modules/mod_authn_alias.so
#LoadModule authn_anon_module modules/mod_authn_anon.so
#LoadModule authn_dbm_module modules/mod_authn_dbm.so
#LoadModule authn_default_module modules/mod_authn_default.so
LoadModule authz_host_module modules/mod_authz_host.so
#LoadModule authz_user_module modules/mod_authz_user.so
#LoadModule authz_owner_module modules/mod_authz_owner.so
#LoadModule authz_groupfile_module modules/mod_authz_groupfile.so
#LoadModule authz_dbm_module modules/mod_authz_dbm.so
#LoadModule authz_default_module modules/mod_authz_default.so
#LoadModule ldap_module modules/mod_ldap.so
#LoadModule authnz_ldap_module modules/mod_authnz_ldap.so
LoadModule include_module modules/mod_include.so
LoadModule log_config_module modules/mod_log_config.so
LoadModule logio_module modules/mod_logio.so
#LoadModule env_module modules/mod_env.so
#LoadModule ext_filter_module modules/mod_ext_filter.so
#LoadModule mime_magic_module modules/mod_mime_magic.so
#LoadModule expires_module modules/mod_expires.so
#LoadModule deflate_module modules/mod_deflate.so
#LoadModule headers_module modules/mod_headers.so
#LoadModule usertrack_module modules/mod_usertrack.so
#LoadModule setenvif_module modules/mod_setenvif.so
LoadModule mime_module modules/mod_mime.so
#LoadModule dav_module modules/mod_dav.so
#LoadModule status_module modules/mod_status.so
#LoadModule autoindex_module modules/mod_autoindex.so
#LoadModule info_module modules/mod_info.so
#LoadModule dav_fs_module modules/mod_dav_fs.so
#LoadModule vhost_alias_module modules/mod_vhost_alias.so
#LoadModule negotiation_module modules/mod_negotiation.so
LoadModule dir_module modules/mod_dir.so
#LoadModule actions_module modules/mod_actions.so
#LoadModule speling_module modules/mod_speling.so
#LoadModule userdir_module modules/mod_userdir.so
#LoadModule alias_module modules/mod_alias.so
#LoadModule substitute_module modules/mod_substitute.so
LoadModule rewrite_module modules/mod_rewrite.so
#LoadModule proxy_module modules/mod_proxy.so
#LoadModule proxy_balancer_module modules/mod_proxy_balancer.so
#LoadModule proxy_ftp_module modules/mod_proxy_ftp.so
#LoadModule proxy_http_module modules/mod_proxy_http.so
#LoadModule proxy_ajp_module modules/mod_proxy_ajp.so
#LoadModule proxy_connect_module modules/mod_proxy_connect.so
#LoadModule cache_module modules/mod_cache.so
#LoadModule suexec_module modules/mod_suexec.so
#LoadModule disk_cache_module modules/mod_disk_cache.so
#LoadModule cgi_module modules/mod_cgi.so
#LoadModule version_module modules/mod_version.so
Include conf.d/php.conf
User apache
Group apache
TraceEnable off

### Section 2: 'Main' server configuration

ServerAdmin root@localhost
ServerName ossfan.org
UseCanonicalName Off
DocumentRoot "/var/www/html"
<Directory />
    Options FollowSymLinks
    AllowOverride All
</Directory>
<Directory "/var/www/html">
    Options Indexes FollowSymLinks
    AllowOverride None
    Order allow,deny
    Allow from all
    <Limit GET POST>
        Order allow,deny
        Allow from all
    </Limit>
    <LimitExcept GET POST>
        Order deny,allow
        Deny from all
    </LimitExcept>
</Directory>
#<IfModule mod_userdir.c>
#    UserDir disabled
#</IfModule>
DirectoryIndex index.html index.html.var
AccessFileName .htaccess
<Files ~ "^\.ht">
    Order allow,deny
    Deny from all
    Satisfy All
</Files>
TypesConfig /etc/mime.types
DefaultType text/plain
#<IfModule mod_mime_magic.c>
#    MIMEMagicFile conf/magic
#</IfModule>
HostnameLookups Off
ErrorLog logs/error_log
LogLevel warn
LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined
LogFormat "%h %l %u %t \"%r\" %>s %b" common
LogFormat "%{Referer}i -> %U" referer
LogFormat "%{User-agent}i" agent
CustomLog logs/access_log combined
ServerSignature Off
#Alias /icons/ "/var/www/icons/"
#<Directory "/var/www/icons">
#    Options Indexes MultiViews FollowSymLinks
#    AllowOverride None
#    Order allow,deny
#    Allow from all
#</Directory>
#<IfModule mod_dav_fs.c>
#    DAVLockDB /var/lib/dav/lockdb
#</IfModule>
#ScriptAlias /cgi-bin/ "/var/www/cgi-bin/"
#<Directory "/var/www/cgi-bin">
#    AllowOverride None
#    Options None
#    Order allow,deny
#    Allow from all
#</Directory>
#IndexOptions FancyIndexing VersionSort NameWidth=* HTMLTable Charset=UTF-8
#AddIconByEncoding (CMP,/icons/compressed.gif) x-compress x-gzip
#AddIconByType (TXT,/icons/text.gif) text/*
#AddIconByType (IMG,/icons/image2.gif) image/*
#AddIconByType (SND,/icons/sound2.gif) audio/*
#AddIconByType (VID,/icons/movie.gif) video/*
#AddIcon /icons/binary.gif .bin .exe
#AddIcon /icons/binhex.gif .hqx
#AddIcon /icons/tar.gif .tar
#AddIcon /icons/world2.gif .wrl .wrl.gz .vrml .vrm .iv
#AddIcon /icons/compressed.gif .Z .z .tgz .gz .zip
#AddIcon /icons/a.gif .ps .ai .eps
#AddIcon /icons/layout.gif .html .shtml .htm .pdf
#AddIcon /icons/text.gif .txt
#AddIcon /icons/c.gif .c
#AddIcon /icons/p.gif .pl .py
#AddIcon /icons/f.gif .for
#AddIcon /icons/dvi.gif .dvi
#AddIcon /icons/uuencoded.gif .uu
#AddIcon /icons/script.gif .conf .sh .shar .csh .ksh .tcl
#AddIcon /icons/tex.gif .tex
#AddIcon /icons/bomb.gif core
#AddIcon /icons/back.gif ..
#AddIcon /icons/hand.right.gif README
#AddIcon /icons/folder.gif ^^DIRECTORY^^
#AddIcon /icons/blank.gif ^^BLANKICON^^
#DefaultIcon /icons/unknown.gif
#ReadmeName README.html
#HeaderName HEADER.html
#IndexIgnore .??* *~ *# HEADER* README* RCS CVS *,v *,t
#AddLanguage ca .ca
#AddLanguage cs .cz .cs
#AddLanguage da .dk
#AddLanguage de .de
#AddLanguage el .el
#AddLanguage en .en
#AddLanguage eo .eo
#AddLanguage es .es
#AddLanguage et .et
#AddLanguage fr .fr
#AddLanguage he .he
#AddLanguage hr .hr
#AddLanguage it .it
#AddLanguage ja .ja
#AddLanguage ko .ko
#AddLanguage ltz .ltz
#AddLanguage nl .nl
#AddLanguage nn .nn
#AddLanguage no .no
#AddLanguage pl .po
#AddLanguage pt .pt
#AddLanguage pt-BR .pt-br
#AddLanguage ru .ru
#AddLanguage sv .sv
#AddLanguage zh-CN .zh-cn
#AddLanguage zh-TW .zh-tw
#LanguagePriority en ca cs da de el eo es et fr he hr it ja ko ltz nl nn no pl pt pt-BR ru sv zh-CN zh-TW
#ForceLanguagePriority Prefer Fallback
AddDefaultCharset Off
#AddType application/x-compress .Z
#AddType application/x-gzip .gz .tgz
#AddType application/x-x509-ca-cert .crt
#AddType application/x-pkcs7-crl    .crl
#AddHandler type-map var
#AddType text/html .shtml
#AddOutputFilter INCLUDES .shtml
#Alias /error/ "/var/www/error/"
#<IfModule mod_negotiation.c>
#<IfModule mod_include.c>
#    <Directory "/var/www/error">
#        AllowOverride None
#        Options IncludesNoExec
#        AddOutputFilter Includes html
#        AddHandler type-map var
#        Order allow,deny
#        Allow from all
#        LanguagePriority en es de fr
#        ForceLanguagePriority Prefer Fallback
#    </Directory>
#</IfModule>
#</IfModule>
#BrowserMatch "Mozilla/2" nokeepalive
#BrowserMatch "MSIE 4\.0b2;" nokeepalive downgrade-1.0 force-response-1.0
#BrowserMatch "RealPlayer 4\.0" force-response-1.0
#BrowserMatch "Java/1\.0" force-response-1.0
#BrowserMatch "JDK/1\.0" force-response-1.0
#BrowserMatch "Microsoft Data Access Internet Publishing Provider" redirect-carefully
#BrowserMatch "MS FrontPage" redirect-carefully
#BrowserMatch "^WebDrive" redirect-carefully
#BrowserMatch "^WebDAVFS/1.[0123]" redirect-carefully
#BrowserMatch "^gnome-vfs/1.0" redirect-carefully
#BrowserMatch "^XML Spy" redirect-carefully
#BrowserMatch "^Dreamweaver-WebDAV-SCM1" redirect-carefully

### Section 3: Virtual Hosts

<VirtualHost *:80>
    ServerAdmin webmaster@ossfan.org
    DocumentRoot /var/www/html
    ServerName ossfan.org
    ErrorLog logs/ossfan.org-error_log
    CustomLog logs/ossfan.org-access_log common
</VirtualHost>

(2) hostsファイルの編集

 自ノードのホスト名を名前解決するためにhostsファイルに追記します。 設定しなくてもApacheは起動します。 設定しない場合、Apacheを起動する度に警告メッセージが出力されるので、これを防ぐための設定です。 ホスト名は server1 ですが、Apacheの設定で ServerName を ossfan.org としましたので、 ossfan.org を名前解決できる必要があります。

# hostname
server1
# cd /etc/
# vi hosts
ファイル名:/etc/hosts
※ファイルの末尾に追加※
192.168.0.106   server1 ossfan.org

(3) Apacheの自動起動設定

 Linux起動時にApacheを自動起動するよう設定します。 もし自動で起動すると都合が悪い場合はここの手順は飛ばしてください。

# chkconfig --list httpd
httpd           0:off   1:off   2:off   3:off   4:off   5:off   6:off
# chkconfig httpd on
# chkconfig --list httpd
httpd           0:off   1:off   2:on    3:on    4:on    5:on    6:off

(4)Apacheの起動

 一通り設定が終わったらApacheを起動します。

# service httpd start
httpd を起動中:                                            [  OK  ]
# ps -ef | grep httpd
root      6354     1  0 05:42 ?        00:00:00 /usr/sbin/httpd
apache    6356  6354  0 05:42 ?        00:00:00 /usr/sbin/httpd
apache    6357  6354  0 05:42 ?        00:00:00 /usr/sbin/httpd
apache    6358  6354  0 05:42 ?        00:00:00 /usr/sbin/httpd
apache    6359  6354  0 05:42 ?        00:00:00 /usr/sbin/httpd
apache    6360  6354  0 05:42 ?        00:00:00 /usr/sbin/httpd
apache    6361  6354  0 05:42 ?        00:00:00 /usr/sbin/httpd
apache    6362  6354  0 05:42 ?        00:00:00 /usr/sbin/httpd
apache    6363  6354  0 05:42 ?        00:00:00 /usr/sbin/httpd
root      6365  5652  0 05:42 pts/0    00:00:00 grep httpd

動作テスト

 Apacheのドキュメントルート(/var/www/html/)配下にテスト用のファイルを作成して配置し、 ブラウザからアクセスして表示できることを確認します。

HTMLファイルの表示テスト

 一般的なHTMLファイルを作成して画面の表示を確認します。

# cd /var/www/html/
# vi index.html
ファイル名:/var/www/html/index.html
<html>
  <head>
    <title>Test Page</title>
  </head>
  <body>
    <h1>This is test page!</h1>
  </body>
</html>

PHPの実行テスト

 PHPの設定情報を表示する phpinfo() 関数を実行して結果を確認します。 以下のような画面が表示されれば、正常にPHPのプログラムが実行できる状態になっています。

# cd /var/www/html/
# vi index.php
ファイル名:/var/www/html/index.php
<?php phpinfo() ?>

 ブラウザの画面を下にスクロールして、pdo_pgsql と pgsql が表示されていれば、 PostgreSQLへアクセスするための機能が有効になっています。

PHPでPostgreSQLへの接続テスト

 PHPのプログラムからPostgreSQLへの接続テストを行います。 接続、切断だけを行う簡単なプログラムを作成します。

# cd /var/www/html/
# vi test.php
ファイル名:/var/www/html/test.php
<html>
  <head>
    <title>PostgreSQL接続テスト</title>
  </head>
  <body>
<?php
  $conn_string = "host=192.168.0.106 port=5432 dbname=testdb1 user=user1 password=pass";
  $dbconn = pg_connect($conn_string);
  if(!$dbconn) {
    print('接続失敗<br>');
  } else {
    print('接続成功<br>');
  }

  $dbclose = pg_close($dbconn);
  if(!$dbclose) {
    print('切断失敗<br>');
  } else {
    print('切断成功<br>');
  }
?>
  </body>
</html>

 以下のように「接続成功」と「切断成功」と表示されればPostgreSQLへの接続は成功です。

プロフィール

らのっち

損害保険会社のIT企画部に勤務するSEです。OSSを勉強中です。

<所属>
日本PostgreSQLユーザ会とくしまOSS普及協議会

■■■ 当サイトは Internet Explorer 11 と Mozilla Firefox 43 で動作確認済みです。 ■■■