第一次配置动手php支持Oracle,走了很多弯路才配置成功。在此写这个文档,希望可以和大家分享,帮助遇到相同问题的朋友。
在Windows下用Php配置Oracle的基本要点:
1.在php.ini文件中去掉extension = php_oci8.dll和extension = php_pdo_oci.dll前的分号;
提示:php_oci8.dll至少是oracle 10版本的,如果是oracle 11版本以后的,可以选择去掉extension = php_oci8_11g.dll前的分号。
2.需要下载Oracle客户端,客户端的位数要和apache的相同。Oracle instantclient并不需要安装,只要解压到自定义目录$dir下即可,比如这里的G:\Oracle\client\instantclient_11_2。
提示1:在没有oracle客户端时,PHP无法加载php_oci8.dll模块,原因是php_oci8.dll依赖的相关组件没有找到。
虽然且打开了 extension=php_oci8.dll,但是查看apache的日志(在logs/error.log中),发现类似的错误
PHP Warning: PHP Startup: Unable to load dynamic library
提示2:如果oracle客户端的位数与apache不同,还是会找不到oracle的oci.dll文件。比如当前apache是32位的,
但oracle客户端是64位的,apache的日志会提示
php_oci.dll文件不是有效的Win32应用程序。
3.在$dir目录下创建TNS目录,比如这里的G:\Oracle\client\TNS,要与oracle客户端是同根目录。并在TNS目录下创建tnsnames.ora文件。
tnsnames.ora文件的例子如下:
WHKD =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = 10.210.1.23)(PORT = 1521))
)
(CONNECT_DATA =
(SERVICE_NAME = orcl)
)
)
其中WHKD是网络服务名,orcl是服务名(你要访问的数据库名),10.210.1.23是你要访问的主机名,1521是端口号.
4.配置环境变量PATH和TNS_ADMIN、NLS_LANG
把oracle客户端的路径添加到path变量里,比如这里的G:\Oracle\client\instantclient_11_2。
创建新的环境变量TNS_ADMIN,设置值为TNS的路径,比如这里的G:\Oracle\client\TNS.
创建新的环境变量NLS_LANG值为:SIMPLIFIED CHINESE_CHINA.ZHS16GBK.
5.重启apache服务,查看phpinfo()时可以看到pdo里面包括了oci,则说明已配置成功。
6.测试代码。
<?php
$conn = oci_connect("username","password","tnsname");
?>
其中username和password是连接数据库的用户名和密码,tnsname是你在tnsnames.ora中创建的网络服务名,比如这里的WHKD.