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
設定
Apache設定ファイルの編集
viエディタでApacheの設定ファイル(httpd.conf)を編集します。
# cd /etc/httpd/conf/ # vi 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.htmlindex.html.varAccessFileName .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>
hostsファイルの編集
自ノードのホスト名を名前解決するためにhostsファイルに追記します。 設定しなくてもApacheは起動します。 設定しない場合、Apacheを起動する度に警告メッセージが出力されるので、これを防ぐための設定です。 ホスト名は server1 ですが、Apacheの設定で ServerName を ossfan.org としましたので、 ossfan.org を名前解決できる必要があります。
# hostname server1 # cd /etc/ # vi hosts
※ファイルの末尾に追加※
192.168.0.106 server1 ossfan.org
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
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
<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
<?php phpinfo() ?>
ブラウザの画面を下にスクロールして、pdo_pgsql と pgsql が表示されていれば、 PostgreSQLへアクセスするための機能が有効になっています。
PHPでPostgreSQLへの接続テスト
PHPのプログラムからPostgreSQLへの接続テストを行います。 接続、切断だけを行う簡単なプログラムを作成します。
# cd /var/www/html/ # vi 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への接続は成功です。