Oracle Notes

John Korchok jkorchok at hotmail.com
Sun Feb 3 14:14:48 PST 2008


For anyone else who may be struggling with getting Oracle to play with
MacPorts PHP, here are my notes after installation on three systems and
about 100 hours of tinkering. Start with a PowerPC, as the Oracle Instant
Client for Mac does not yet work with Intel machines.

1. Install php5 with oracle support:
sudo port install php5 +apache2 +oracle

2. So that the Apache user can find the relevant files, add environment
variables to opt/local/apache2/bin/envvars:
export LD_LIBRARY_PATH="/opt/local/lib/oracle"
export TNS_ADMIN="/Applications/Oracle" (or whatever folder is a convenient
spot to store sqlnet.ora and tnsnames.ora)
Many web sites refer to setting DYLD_LIBRARY_PATH, you can do that instead
of LD_LIBRARY_PATH and it has the same effect. Heck, use 'em both for good
measure! Do _not_ use putenv in a PHP script or SetEnv in httpd.conf to set
the variables, it won't work. Apache will also not pick up environment
variables from /private/etc/profile. Note to Ryan: can MacPorts update
envvars?

3. Restart Apache

For testing purposes, you can also add support for SQLPlus from the command
line by downloading the Instant Client SQLPlus files from
http://www.oracle.com/technology/software/tech/oci/instantclient/htdocs/macs
oft.html and copying them to opt/local/lib/oracle. In that case you will
have to add these variables to /Users/YourUserName/.profile:
export LD_LIBRARY_PATH="/opt/local/lib/oracle:$LD_LIBRARY_PATH"
export TNS_ADMIN="/Applications/Oracle"
export PATH="/opt/local/lib/oracle:$PATH"
If you prefer all users to have SQLPlus access, add the variables to
/private/etc/profile

If you have trouble with errors like "ORA-12154: TNS:could not resolve the
connect identifier specified", Oracle may not be able to read your
tnsnames.ora file. We had to amend the first line from "ALIG" to
"ALIG.revion.com" (appending the url of the host name) to get it to work.
Here are connection strings for PHP and SQLPlus, respectively:
$con = OCILogon('YourUserName', 'YourPassword',
"//your.host.address.com:1521/YourServiceName");
sqlplus
YourUserName/YourPassword@//your.host.address.com:1521/YourServiceName

If all else fails, you can use a verbose connection string to eliminate any
need for tnsnames.ora:
$con = oci_connect('YourUserName', 'YourPassword',
'(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=your.host.address.com)(PORT=1521)
)(CONNECT_DATA=(SID=YourServiceName)(SERVER=DEDICATED)))');

Here's the verbose syntax for SQLPlus:
sqlplus
YourUserName/YourPassword@\(DESCRIPTION=\(ADDRESS=\(PROTOCOL=TCP\)\(HOST=you
r.host.address.com\)\(PORT=1521\)\)\(CONNECT_DATA=\(SID=YourServiceName\)\(S
ERVER=DEDICATED\)\)\)

John Korchok



More information about the macports-users mailing list