关于PHP连接ORACLE问题(06年自己写…
来源:互联网 发布:销售月数据分析表格 编辑:程序博客网 时间:2024/04/28 22:09
网络上有关PHP连接ORACLE的文章很多,但往往不够全面。一般只能解决部分问题,
OS:bluepoint2.0
Java:
Oracle:
这个网站可以下载多个版本的oracle
至于JDK可以在这里下:
http://mirrors.ibiblio.org/pub/mirrors/blackdown/
bluepoint2.0就比较不好找了,我有ISO景象文件,不知那位可以提供FTP空间,不过其他的版本的linux问题也应该不大。
一、ORACLE的安装
网上关于ORACLE的安装的文章很多,如果在redhat7.1(类似内核的发行版)或以上的版本要安装ORACLE8i要解决glibc
glibc-2.1.3-15.i386.rpm
glibc-profile-2.1.3-15.i386.rpm
(这些包可以在redhat6.2的光盘中获得),不必安装glibc-2.1.3-stubs.tar.gz补丁,也无须改变gcc,ld等接连。具体的安装过程就不在这里讲了,只贴出我的环境,这个在下面的叙述中有用:
#------------------------------------------------------------------------
#
#------------------------------------------------------------------------
ORACLE_HOME=/home/oracle/OraHome1
ORACLE_SID=orcl
ORACLE_TERM=xterm
ORACLE_OWNER=oracle8
TNS_ADMIN=/home/oracle/config/8.1.6
CLASSPATH=$ORACLE_HOME/jdbc/lib/classes111.zip:$CLASSPATH
LD_LIBRARY_PATH=$ORACLE_HOME/lib:$LD_LIBRARY_PATH
NLS_LANG="SIMPLIFIED
#
PATH=$PATH:/usr/local/jre/bin:bin:/sbin:/usr/sbin:$ORACLE_HOME/bin
PATH=$PATH:/usr/local/sbin:/usr/bin/X11:.
HOSTNAME
在建库中名字选为ORACLE8,还有个问题,就是字符集选
如果建库时用了US7ASCII,在服务端中文没问题,但windows客户端就麻烦了,注册表改为和服务端一致即(Hkey_Local_machine\Software\Oracle\Home0\NLS_Lang
修改server端字符集(不建议使用)
在oracle
$sqlplus
SQL>conn
若此时数据库服务器已启动,则先执行SHUTDOWN
SQL>STARTUP
SQL>ALTER
SQL>ALTER
SQL>ALTER
SQL>ALTER
SQL>ALTER
SQL>ALTER
SQL>SHUTDOWN
SQL>STARTUP
感觉有点离题,浪我们言归正传吧
二、apache和PHP的安装
以root用户登录,#mkdir
从网络下载apache和php的源代码,并把他们考到/www,
apache官方网站http://archive.apache.org/dist/httpd/
php官方网站:http://www.php.net/releases.php
我用的是apache_1.3.36,php-4.1.2
#tar
#tar
--with-oracle=/home/oracle/OraHome1
--with-oci8=/home/oracle/
--with-mysql
--enable-url-includes
--enable-sockets
--enable-track-vars
--disable-debug
注意这里要根据各自的安装目录来配置
#cd
#./configure
有文章里写成--activate-module=./src/modules/php4/libphp4.a
以我自己的经历,这样做configure会失败。
#make
#make
之类的模块装入语句,加了http反而不能正确启动。但必须加上
AddType
AddType
否则apache无法正确识别PHP后缀。
/www/conf/httpd.conf很重要,下面解决ORACLE连接也要设置该文件。
下面就可以先测试一下了:
先启动http服务:/www/bin/apachectl
在windows客户端打开IE,在地址栏输入http://you_ip_address/
可以看到Apache
在测试php:以root登陆,#vi
输入以下内容:
?>
:wq退出。
在IE地址栏输入http://you_ip_address/
测试php和oracle的连接:
同样在/www/htdocs/目录下创建ora1.php,
else
?>
在IE地址栏输入http://you_ip_address/
如果你能看到Oracle
Warning:
Oracle
Warning:
之类的出错信息。要解决这个问题就比较复杂了,要从unix/linux访问控制,TSN连接等方面入手去分析。有人认为这和环境变量有关,加了一大堆putenv之类的,其实没什么大用。
我们再来次试验将$conn=OCILogon("scott","tiger","localdb");
改为conn=OCILogon("scott","tiger");然后打开文件
/www/conf/httpd.conf
启动数据库有多种做法,这里用SVRMGR工具:
以oracle用户登陆linux
oracle$svrmgrl
SVRMGR>connect
SVRMGR>startup
不过这样做好象不是很好(安全性是不是会有问题,我也不太知道),而且我们还不知道这样做会成功的道理。所以本文还是要继续写下去。
三、Oracle访问和TNS配置
要真正明白这个问题估计要写本书了,这里只提及对本问题最重要的一些内容:
支持网络连接的服务类型有dedicated方式,MTS方式。Dedicated是专用方式,MTS是共享方式,可用select
下面要澄清一个比较重要的事情:
用户连接到Oracle
1. Oracle本地用户连接数据库
这种情况无须启用listener进程,也用不到listener.ora、sqlnet.ora,
sqlplus
非oracle用户要连接成功的话,还需要设置好oracle环境和确定对$ORACLE_HOME有访问权限。
2. 远程用户连接数据库服务器(TNS连接)
这种情况须启用listener进程,在用lsnrctl
连接的格式为:
sqlplus
当然要连接成功在客户机端还要做很多事情:在客户端机器上安装ORACLE的Oracle
如果本地用户一定要以TNS连接的方式,也不是不可以,但需要在服务器端同时配置listener.ora、sqlnet.ora、
为了说明这三个文件的配置方法,先说明以下的概念:
主机识别:在/etc/hosts中
数据库识别:在/etc/oratab中
服务识别:$ORACLE_HOME/network/admin/tnsnames.ora
默认的情况其他两个配置也放在这里,当然你可以用环境变量TNS_ADMIN来设置新的路径,即便你设置了TNS_ADMIN,但$ORACLE_HOME/network/admin这个路径也还是能被识别。
下面边贴我的这三个配置文件边来分析其意义:
1.listener.ora
LISTENER