整合Oracle 10g、Apache 2.0、Php 5


基本介绍

2004年7月13日, PHP 官方站点 正式发布了 PHP 5。Oracle 在 2004 年 8 月宣布将在拳头产品 Application Server 中提供对 PHP 的支持。先是在Oracle Application Server 10g (9.0.4) 提供 mod_php 模块,继而在Oracle Application Server 10g Release 2 (10.1.2) 中提供了 PHP 4.3的版本,接着Oracle JDeveloper 10g 也将提供对 PHP 扩展能力。相信,不久Oracle将正式支持 PHP 5。而随着 Oracle 技术社区的大力推广,也将有更多的开发人员利用 PHP 进行大型数据库引用的开发。

在 OTN 上已经有文档描述如何进行 10g / HTTPD 1.3/ PHP 4 的整合。所以这篇文档将描述如何整合 Oracle 10g、Apache (httpd 2)、 PHP 5。便于快速的组建一个开发环境。如果您想对 PHP 的一些新功能(比如 PDO )进行一下体验,那么本文可以作为一个开端。

Oracle、Apache、 PHP 三者之间的关系不妨借用一下这张示意图( 原图地址 ):

Oracle Apache PHP relation

本文假定您的 Oracle 10g (服务器或者客户端)已经安装完毕。如果没有安装,请参考 这篇文档 :

> http://www.dbanotes.net/Oracle/Install-Oracle10g-RHEL3.htm

确定自己的 Oracle 处于可用状态。

本文所拥的操作系统为 Fedora Core 3 Linux,Oracle 版本为10 R1 (10.1.0.2)。

下载所需文件:HTTPD 和 PHP 5

> HTTPD - httpd://httpd.apache.org (目前的版本是 2.0.52)
> PHP 5 - http://www.php.net (最新版本是 5.0.2)

安装HTTPD

需要说明的是,现在 Apache 社区不推荐把 Apache 2.0 用在产品环境中.

> > [root@FC3 software]# tar -zxvf httpd-2.0.52.tar.gz > [root@FC3 software]# cd httpd-2.0.52 > [root@FC3 httpd-2.0.52]# ./configure --prefix=/usr/local/apache --enable-module=so > [root@FC3 httpd-2.0.52]# make clean > [root@FC3 httpd-2.0.52]# make > [root@FC3 httpd-2.0.52]# make install > [root@FC3 httpd-2.0.52]# /usr/local/apache/bin/apachectl start
> [root@FC3 httpd-2.0.52]# /usr/local/apache/bin/apachectl stop
>

安装说明:第三行指定 Apache 的架构独立的文件安装位置。同时指定将用模块的形式。

如果为了方便的话,可以创建两个脚本控制 Apache 的启动与关闭。

> > [root@FC3 ~]# vi /bin/startapache >

添加如下内容:

> > #!/bin/sh > ORACLE_HOME=/u01/app/oracle/product/10.1.0/db_1 >
> ORACLE_SID=TEST > export ORACLE_HOME ORACLE_SID > echo Starting Apache > /usr/local/apache/bin/apachectl start >

创建关闭 apache 的脚本:

> > [root@FC3 ~]# vi /bin/stopapache

添加如下内容:

> > #!/bin/sh > ORACLE_HOME=/u01/app/oracle/product/10.1.0/db_1 >
> ORACLE_SID=TEST > export ORACLE_HOME ORACLE_SID > echo Starting Apache > /usr/local/apache/bin/apachectl stop

修改文件权限:

> > [root@FC3 ~] chmod +x /bin/startapache /bin/stopapache >

安装 PHP 5

> > [root@FC3 software]# tar -xjf php-5.0.2.tar.bz2
> [root@FC3 software]# cd php-5.0.2
> [root@FC3 php-5.0.2]# export ORACLE_BASE=/u01/app/oracle
> [root@FC3 php-5.0.2]# export ORACLE_HOME=$ORACLE_BASE/product/10.1.0/db_1
> [root@FC3 php-5.0.2]# export ORACLE_SID=TEST
> [root@FC3 php-5.0.2]# export PATH=$PATH:$HOME/bin:$ORACLE_HOME/bin
> [root@FC3 php-5.0.2]# export LD_LIBRARY_PATH=$ORACLE_HOME/lib:/usr/lib
> [root@FC3 php-5.0.2]# ./configure --with-apxs2=/usr/local/apache/bin/apxs \ > --with-oci8=$ORACLE_HOME > [root@FC3 php-5.0.2]# make clean > [root@FC3 php-5.0.2]# make
> [root@FC3 php-5.0.2]# make install > [root@FC3 php-5.0.2]# cp php.ini-dist /usr/local/lib/php.ini >

安装说明:第三到七行其实有些罗嗦了,其目的是控制 root 用户的环境变量,其实也可以直接在 root 用户的.bash_profile文件中制定环境变量。当然了,也可以用 oracle 用户来进行 configure 与 make 。第八行中的 --with-oci8=$ORACLE_HOME 激活 oci8 支持。

接下来需要修改httpd.conf 文件的内容:

> > [root@FC3 php-5.0.2]# vi /usr/local/apache/conf/httpd.conf >

添加如下内容:

> > LoadModule php5_module modules/libphp5.so >
>

1<ifmodule mod_php5.c="">
2&gt;          AddType application/x-httpd-php .php
3&gt;     </ifmodule>

>

重新启动 apache:

> > [root@FC3 ]# /bin/stopapache > [root@FC3 ]# /bin/startapache

测试 PHP 模块

测试 PHP 模块是否已经可用。当然是标准办法,写一个包含如下内容的 PHP 页面 info.php:

> > ``` phpinfo();

 1&gt;     
 2
 3从浏览器中查看该页面输出内容。 
 4
 5注意,该页面中的内容 Configure Command 那一行中的内容是否包括如下内容: 
 6
 7&gt; 
 8&gt;     '--with-apxs2=/usr/local/apache/bin/apxs'
 9&gt;     '--with-oci8=/u01/app/oracle/product/10.1.0/db_1'
10&gt;     
11
12**注意** :在测试之后,出于安全的考虑,请把该文件删除 
13
14##  测试 PHP 的 oci 
15
16写一个简单的页面测试 oci 是否可用 (Just a copy sample from OTN): 
17
18&gt; 
19&gt;     ```
20
21>     
22>     $db_conn = ocilogon( "scott", "tiger","TEST" );
23>     
24>     $cmdstr = "select ename, sal from emp";
25>     
26>     $parsed = ociparse($db_conn, $cmdstr);
27>     ociexecute($parsed);
28>     
29>     $nrows = ocifetchstatement($parsed, $results);
30>     
31>     echo "

<html><head><title>Oracle PHP Test</title></head><body>"; &gt; echo "<center><h2>Oracle PHP Test</h2><br/>"; &gt; echo "<table border="1" cellspacing="0" width="50%">\n&lt;tr>\n"; &gt; echo "<td><b>Name</b></td>\n<td><b>Salary</b></td>\n</tr>\n"; &gt;
&gt; for ($i = 0; $i &lt; $nrows; $i++ ) &gt; { &gt; echo "<tr>\n"; &gt; echo "<td>" . $results["ENAME"][$i] . "</td>"; &gt; echo "<td>$ " . number_format($results["SAL"][$i], 2). "</td>"; &gt; echo "</tr>\n"; &gt;
&gt; } &gt;
&gt; echo "<tr><td colspan="2"> Number of Rows: $nrows</td></tr></table>"; &gt; echo "<br/><em>If you see data, then it works!</em><br/></center></body></html>

1\n";
2>     
3>     

>

说明:上例中,scott/tiger分别为数据库的用户名字和密码,TEST为数据库连接串名字。

参考文档

Installing Oracle, PHP, and Apache on Linux by Robert Clevenger
PHP:Apache 2.0 on Unix systems - http://www.php.net/manual/en/install.unix.apache2.php

更多信息

Oracle Open Source Developer Center - http://www.oracle.com/technology/tech/opensource/index.html


本文作者

Fenng ,某美资公司DBA,业余时间混迹于各数据库相关的技术论坛且乐此不疲。目前关注如何利用ORACLE数据库有效地构建企业应用。对Oracle tuning、troubleshooting有一点研究。
个人技术站点: http://www.dbanotes.net/ 。可以通过电子邮件 dbanotes @gmail.com 联系到他。


原文出处

http://www.dbanotes.net/OpenSource/Oracle10g_Apache2_PHP5_Integration.htm

Published At
Categories with 数据库类
Tagged with
comments powered by Disqus