This is something that I wanted to post up for a while, because this is rather simple stuff and yet it took me a while to put this whole thing together for my own use/setup. It's also something that got some people interested and they asked me to post this up. So this post is for Maggie Nelson (http://www.objectivelyoriented.com/) who is an active PHP and Oracle advocate.
These instructions are for Linux since this is what I use. I am also using Mandriva 2007.1 and will be using RPM packages where available and will mentioned some things specific to Mandriva.
Setup consists of two parts:
1. Installing Oracle Instant Client on Linux
2. Getting and compiling oci8 extension for PHP.
So let's begin.
Installing Oracle Instant Client on Linux:1. Download the Oracle Instant Client for Linux rpms from http://www.oracle.com/technology/software/tech/oci/instantclient/htdocs/linuxsoft.html (http://www.oracle.com/technology/software/tech/oci/instantclient/htdocs/linuxsoft.html). The files that I am using and that you will need are:
oracle-instantclient-sqlplus-10.2.0.3-1
oracle-instantclient-devel-10.2.0.3-1
oracle-instantclient-basic-10.2.0.3-1
2. Install those rpms to your linux system:
sudo rpm -ivh oracle-instantclient-*
NOTE: Here is where things get interesting. We need to prepare a couple of configuration files and you will need to become root in order to make those files usable on a global level.
3. You need to be root at this point:
sudo bash
4. Create
/etc/oracle directory as this is where we will store Oracle configuration files.
5. You will also need to grab a copy of
tnsnames.ora file either from your Oracle DBA or from another system.
copy tnsnames.ora /etc/oracle
6. Create a shell script that will initialize Oracle environment variables.
vi /etc/profile.d/oracle.sh
place the following into that file:
export TNS_ADMIN=/etc/oracle/
export SQLPATH=/usr/lib/oracle/10.2.0.3/client/bin
export LD_LIBRARY_PATH=/usr/lib/oracle/10.2.0.3/client/lib:$LD_LIBRARY_PATH
export PATH=$PATH:$SQLPATH
7. This is pretty much it. When you logout and log back in you should confirm that your environment variables are there using
export
. Also try out sqlplus to make sure it works and can connect to your Oracle database.
Getting and compiling oci8 extension for PHP:1. pear download pecl/oci8
2. tar -xzvf oci8-1.2.4.tgz
3. cd oci8-1.2.4
4. phpize (php4ize for php4 support, it seems Mandriva names these binaries differently for php4)
5. ./configure --with-oci8=instantclient,/usr/lib/oracle/10.2.0.3/client/lib
6. make
7. sudo make install
Now become root user (sudo bash)
8. Create a file called
/etc/php.d/999_oci.ini and place the following line there:
extension=oci8.so
9. vi /etc/sysconfig/http and add the following lines at the very end of the file
###
#
# Adding ORACLE Variables to the config status (cause during upgrade the httpd file got replaced :( )
#
export TNS_ADMIN=/etc/oracle
export NLS_LANG=AMERICAN_AMERICA.AL32UTF8
10. service httpd restart
11. And you are done. Pull up a page that calls phpinfo() and confirm that oci8 is loaded in apache and that the environment variables are setup properly. You can also do "php -m" to see of php cli loads the module as well.
I hope that this is very informative and that I didn't miss anything. If there's something that I missed or there's an error somewhere then please let me know and I will correct it.
UPDATE: Make sure you have php "dev" package installed so that you can compile PHP extension(s).
UPDATE 2: I have posted updated instructions regarding Oracle Instant Client 11g and building Pecl OCI8 with 1 line (http://www.gena01.com/forum/gena01_blog/installing_oracle_instant_client_11g_and_pecl_oci8-t193.0.html)
Gena01