В продолжение темы про установку Oracle Client на Windows расскажу про свой опыт установки аналогичной связки для Mac OS.
На старте имеем Mac OS X 10.10 Yosemite в которой уже работает штатный web сервер apache и php 5.4. Цель первая - получить рабочий Oracle Client, иметь возможность работать с Oracle через Toad (да да, для мака есть тоад, и он бесплатный). Цель вторая - иметь возможность работать с Oracle из PHP.
Для начала качаем Oracle Instant Client для Mac OS с сайта oracle.com (там нужно регистрироваться):
* я для себя выбрал 11-ю версию для того чтоб иметь возможность работы со старыми БД, например 9-й версии.
Распаковываем содержимое архивов в удобное место, для меня это /Library/Oracle. Возможны и другие варианты, но для меня более логично показалось так, далее все описания будут производиться относительно этого пути.
В результате получаем вот такую структуру папок:
/Library/Oracle/instantclient_11_2
/Library/Oracle/instantclient_11_2/sdk (если решили с SDK)
Далее создаем линки:
cd /Library/Oracle/instantclient_11_2
ln -s libclntsh.dylib.11.1 libclntsh.dylib
ln -s libocci.dylib.11.1 libocci.dylib.dylib
Для работы нам потребуются
ORACLE_HOME
NLS_LANG
TNS_ADMIN
PATH
DYLD_LIBRARY_PATH
CLASSPATH
Для начала в свой ~/.bash_profile пишем следующее
export ORACLE_HOME=/Library/Oracle
export NLS_LANG=American_America.UTF8
export TNS_ADMIN=/Library/Oracle # здесь у меня будет лежать уже имеющийся tnsnames.ora
export PATH=/Library/Oracle/instantclient_11_2:$PATH
export DYLD_LIBRARY_PATH=/Library/Oracle/instantclient_11_2:$DYLD_LIBRARY_PATH
export CLASSPATH=$ORACLE_HOME:$CLASSPATH
Для продолжения в /etc/launchd.conf пишем следующее
setenv ORACLE_HOME /Library/Oracle
setenv NLS_LANG American_America.UTF8
setenv TNS_ADMIN /Library/Oracle
В принципе этот метод считается не рабочим начиная с Mac OS X 10.10 Yosemite.
Кладем свой tnsnames.ora в TNS_ADMIN и после того как все файлы на своих местах меняем права на ORACLE_HOME:
sudo chgrp –R wheel /Library/Oracle
sudo chmod –R 755 /Library/Oracle
Теперь можно перезагружаться и проверять соединение при помощи SQLPlus.
Toad для Mac OS бесплатен и доступен в AppStore. Ставим привычным путем. После запуска Toad надо в настройках в разделе Databases > Oracle Database жмем кнопку Add и выбираем файл /Library/Oracle/instantclient_11_1/ojdbc6.jar
Важно! Далее при создании соединения нужно в разделе JDBC Driver выбирать наш свеже добавленный JAR от Oracle Instatnt Client, в противном случае нормально работать не будет.
На этом простая часть нашей работы завершена, у нас есть возможность работы с Oracle через Toad.
В моем случае это PHP 5.5.14 который изначально был в Mac OS X Yosemite, это подкинуло несколько проблем. Так же хочу заметить что у нас установлен Instant Client SDK (точнее просто распакован в нужное место).
Для начала нам потребуется PEAR для того, чтоб при помощи входящего в его состав PECL получить и собрать расширение OCI8. Итак качаем и ставим PEAR:
curl -O http://pear.php.net/go-pear.phar
sudo php -d detect_unicode=0 go-pear.phar
После этого вам будет предложено куда что ставить из нескольких пунктов, для себя я решил так:
1. /usr/local/pear
4. /usr/local/bin
Теперь при помощи PECL нужно поставить oci8, тут начинаются сложности:
Чтоб не повторять всех моих ошибок опишу как надо было поступить в правильном порядке
Тут все просто, в консоли говорим
gcc
и в появившемся диалоге жмем установить, дожидаемся завершения установки и продолжаем.
В принципе, он должен поставиться вместе с XCode, но если такого не произошло то качаем и собираем его:
curl http://ftp.gnu.org/gnu/autoconf/autoconf-latest.tar.gz > autoconf.tar.gz
tar -xvzf autoconf.tar.gz
cd autoconf-2.69
./configure
sudo make
sudo make install
sudo pecl install oci8-2.0.10
в процессе установки нужно будет указать путь к ORACLE_HOME, скрипт задаст вопрос:
Please provide the path to the ORACLE_HOME directory. Use 'instantclient,/path/to/instant/client/lib' if you're compiling with Oracle Instant Client [autodetect] :
На который нужно ответить
instantclient,/Library/Oracle/instantclient_11_2
Когда установка завершится, идем в /etc/php.ini, находим где описаны расширения и раскомментируем или добавляем
extension=oci8.so
На всякий случай можно проверить наличие расширения oci8.so в файловой системе, у меня оно оказалось в /usr/lib/php/extensions/no-debug-non-zts-20121212/oci8.so
И еще очень важный момент, чтоб все работало нужно сказать нашему серверу Apache переменные окружения для Oracle. Делается это следующим образом:
cd /System/Library/LaunchDaemons
sudo vim org.apache.httpd.plist
Добавляем туда DYLD_LIBRARY_PATH и TNS_ADMIN, в общем после правки файл выглядит примерно так:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>Disabled</key>
<true/>
<key>Label</key>
<string>org.apache.httpd</string>
<key>EnvironmentVariables</key>
<dict>
<key>XPC_SERVICES_UNAVAILABLE</key>
<string>1</string>
<key>DYLD_LIBRARY_PATH</key>
<string>/Library/Oracle/instantclient_11_2</string>
<key>TNS_ADMIN</key>
<string>/Library/Oracle</string>
</dict>
<key>ProgramArguments</key>
<array>
<string>/usr/sbin/httpd</string>
<string>-D</string>
<string>FOREGROUND</string>
</array>
<key>OnDemand</key>
<false/>
</dict>
</plist>
То, что надо добавить выделено жирным, пути соответственно тому что у меня. На этом все готово, перезапускаем апач:
sudo apachectl restart
И убеждаемся что у нас появилась информация о расширении oci8 в phpinfo.
На все эти изыскания у меня ушло примерно пол дня, надеюсь информация будет вам полезна и у вас получится повторить мой опыт и избежать ошибок, с которыми пришлось повозиться мне :)
Ссылки на использованные материалы: