使用PHP连接Oracle(XE)

前言

由于在使用PHP连接Oracle数据库的过程中遇到了一些问题和困扰,因此我想留下搭建的步骤备忘。

环境

    • Mac OS X El Capitan 10.11.6

 

    • VirtualBox 5.0.8 for OS X hosts

 

    • Vagrant 1.7.4

 

    • CentOS release 6.5

 

    Oracle Database Express Edition 11g Release 2 for Linux x64

第一章:Oracle(XE)安装

http://www.oracle.com/technetwork/jp/database/database-technologies/express-edition/downloads/index.html
vagrant ssh-config > ssh.config
scp -F ssh.config oracle-xe-11.2.0-1.0.x86_64.rpm.zip vagrant@default:~/
vagrant ssh

在Oracle(XE)中,运行条件为:交换空间2048MB,以此进行交换设置。

sudo dd if=/dev/zero of=/swapfile bs=1M count=2048
sudo mkswap /swapfile
sudo swapon /swapfile
sudo sh -c "echo '/swapfile swap swap defaults 0 0' >> /etc/fstab" # 再起動でも有効に

主机名会因环境而异。在这里是「vagrant-centos65.vagrantup.com」。

sudo vi /etc/hosts
127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4 vagrant-centos65.vagrantup.com
sudo yum -y install bc
mkdir oracle
mv oracle-xe-11.2.0-1.0.x86_64.rpm.zip oracle/
cd oracle
unzip oracle-xe-11.2.0-1.0.x86_64.rpm.zip 
cd Disk1
sudo rpm -ivh oracle-xe-11.2.0-1.0.x86_64.rpm

在这里,设置是可选的,默认设置,密码设置为“p”。

sudo /etc/init.d/oracle-xe configure

Oracle Database 11g Express Edition Configuration
-------------------------------------------------
This will configure on-boot properties of Oracle Database 11g Express 
Edition.  The following questions will determine whether the database should 
be starting upon system boot, the ports it will use, and the passwords that 
will be used for database accounts.  Press <Enter> to accept the defaults. 
Ctrl-C will abort.

Specify the HTTP port that will be used for Oracle Application Express [8080]:   
Specify a port that will be used for the database listener [1521]:

Specify a password to be used for database accounts.  Note that the same
password will be used for SYS and SYSTEM.  Oracle recommends the use of 
different passwords for each database account.  This can be done after 
initial configuration:p
Confirm the password:p

Do you want Oracle Database 11g Express Edition to be started on boot (y/n) [y]:y

在Oracle(XE)的路径设置中如果没有”LC_CTYPE”、”LC_MESSAGES”和”LC_ALL”则会产生错误。

sudo localedef -f UTF-8 -i ja_JP ja_JP.utf8

为了在登录后使Oracle(XE)的路径设置生效,需要将“. /u01/app/oracle/product/11.2.0/xe/bin/oracle_env.sh”添加到bashrc配置文件中。

vi ~/.bashrc 
# .bashrc

# Source global definitions
if [ -f /etc/bashrc ]; then
        . /etc/bashrc
fi

# User specific aliases and function

. /u01/app/oracle/product/11.2.0/xe/bin/oracle_env.sh
source ~/.bashrc
sqlplus system/p@localhost
create user test identified by "test";       
grant dba to test;
exit;
sqlplus test/test@localhost
create table test (id integer, name varchar2(50));
insert into test values(1, 'test1');
insert into test values(2, 'test2');
exit;

第二章:安装oci8(用于PHP连接到Oracle(XE)的模块)

sudo yum -y install httpd
sudo chkconfig httpd on # httpd自動起動
sudo yum -y install php
sudo yum -y install php-pear # pecl用
sudo yum -y install php-devel # phpize用

从PHP版本上
https://pecl.php.net/package/oci8
安装oci8版本如下所述
在这里,使用PHP5.3.3,oci8-1.4.10
而且,因为不是Oracle Instant Client,所以要设置ORACLE_HOME路径。在这里,设置为”/u01/app/oracle/product/11.2.0/xe”。

export | grep 'ORACLE_HOME' # ORACLE_HOME確認
sudo pecl install oci8-1.4.10
Please provide the path to the ORACLE_HOME directory. Use 'instantclient,/path/to/instant/client/lib' if you're compiling with Oracle Instant Client [autodetect] : /u01/app/oracle/product/11.2.0/xe

为了让php能够使用oci8,需要添加以下配置:”extension=oci8.so”。

sudo cp /etc/php.ini /etc/php.ini.org # 元設定バックアップ
sudo vi /etc/php.ini
extension=oci8.so

要启用Apache对Oracle(XE)的路径设置和其他设置,需要将“/u01/app/oracle/product/11.2.0/xe/bin/oracle_env.sh”添加到sysconfig配置中。

sudo vi /etc/sysconfig/httpd
. /u01/app/oracle/product/11.2.0/xe/bin/oracle_env.sh

将为Oracle添加的主机名称设置为Apache服务器名称(因为Apache在启动时会发出警告)。

sudo cp /etc/httpd/conf/httpd.conf /etc/httpd/conf/httpd.conf.org # 元設定バックアップ
sudo vi /etc/httpd/conf/httpd.conf
#ServerName www.example.com:80
ServerName vagrant-centos65.vagrantup.com:80

最后一段:Oracle(XE)连接确认

sudo service httpd start
sudo vi /var/www/html/test.php
<?php

// "localhost" マシン上の XE サービス(例えばデータベース)に接続します。
$conn = oci_connect('test', 'test', 'localhost/XE');
if (!$conn) {
    $e = oci_error();
    trigger_error(htmlentities($e['message'], ENT_QUOTES), E_USER_ERROR);
}

$stid = oci_parse($conn, 'SELECT * FROM test');
oci_execute($stid);

echo "<table border='1'>\n";
while ($row = oci_fetch_array($stid, OCI_ASSOC+OCI_RETURN_NULLS)) {
    echo "<tr>\n";
    foreach ($row as $item) {
        echo "    <td>" . ($item !== null ? htmlentities($item, ENT_QUOTES) : "&nbsp;") . "</td>\n";
    }
    echo "</tr>\n";
}
echo "</table>\n";

?>
sudo chown -R apache:apache /var/www/html

如果可以通过访问以下网址并显示测试数据,那就可以了:
http://192.168.33.10/test.php

请参照以下内容。

在Varagnt环境的CentOS 6.6上尝试安装Oracle XE(11g Release 2)。
为通过vagrant建立的虚拟机设置swap。

广告
将在 10 秒后关闭
bannerAds