Процесс подключения разбивается на 2 больших этапа:
1. Настройка PL/SQL Developer
2. Настройка OpenServer
Настройка PL/SQL Developer
PL/SQL Developer – это очень популярный редактор\просмотр баз для Oracle (для МуSQL аналог по функционалу PhpMyAdmin)
Я использовал PL/SQL Developer 10.0.3 (ищем на всех торрентах страны).
Хоть у меня стоит и Windows x64, но все модули, клиенты и т.д. нужно качать только для версии x32
Чтобы получить доступ к базе Oracle 10.2.0.5.0 по адресу 192.168.1.10 необходимо установить библиотеки подключения Oracle Instant Client. А точнее Instant Client for Microsoft Windows (32-bit)
http://www.oracle.com/technetwork/datab ... 97480.html (Параллельно проходим миниквест под названием регистрация на сайте Оракла
)
Я скачал клиентские библиотеки и распаковал в папку
c:\instantclient_12_1_2 (это важная папка запомните её)
В переменных системы (Компьютер-> (Правая кнопка мыши)Свойства системы -> Дополнительные параметры системы->Дополнительно->Переменные среды)
прописать 3 переменных:
ORACLE_HOME путь до папки с клиентом оракла
TNS_ADMIN - путь до файла tnsnames.ora
NLS_LANG кодировка для подключения к базе AMERICAN_AMERICA.AL32UTF8 или RUSSIAN_CIS.CL8MSWIN1251 (зависит от настроек конкретной базы) (если ошибётесь вместо русских букв будут крякозябры
)
и добавить путь к переменной PATH
Положить файл tnsnames.ora в папку клиента оракла c:\instantclient_12_1_2\ следующего содержания
ORCL =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.1.10)(PORT = 1521))
)
(CONNECT_DATA =
(SERVICE_NAME = orcl)
)
)
Напрямую прописать путь до клиента оракла в PL/SQL Developer
Настроить соединение так
Если всё верно настроили подключаемся к базе и выполняем запросы.
Настройка OpenServer
За основу взят вот этот мануал
http://www.oracle.com/technetwork/artic ... 88811.html
Я использую следующие настройки OpenServer
Вот с этого сайта качаем модули для Апача
http://www.apachelounge.com/download/VC ... 2-VC11.zip
Из этого архива необходим модуль mod_fcgid
Копируем в папку c:\OpenServer\modules\http\Apache-2.4\modules файл mod_fcgid.so
В файле конфига Апаче подключаем модуль c:\OpenServer\modules\http\Apache-2.4\conf\httpd.conf
Вставляем строку
LoadModule fcgid_module modules/mod_fcgid.so
И в самом конце файла
FcgidInitialEnv PATH "c:/instantclient_12_1_2;c:/OpenServer/modules/php/PHP-5.6;C:/WINDOWS/system32;C:/WINDOWS;C:/WINDOWS/System32/Wbem;"
FcgidInitialEnv SystemRoot "C:/Windows"
FcgidInitialEnv SystemDrive "C:"
FcgidInitialEnv TEMP "C:/WINDOWS/Temp"
FcgidInitialEnv TMP "C:/WINDOWS/Temp"
FcgidInitialEnv windir "C:/WINDOWS"
FcgidIOTimeout 64
FcgidConnectTimeout 16
FcgidMaxRequestsPerProcess 1000
FcgidMaxProcesses 50
FcgidMaxRequestLen 8131072
# Location php.ini:
FcgidInitialEnv PHPRC "c:/OpenServer/modules/php/PHP-5.6"
FcgidInitialEnv PHP_FCGI_MAX_REQUESTS 1000
<Files ~ "\.php$>"
AddHandler fcgid-script .php
FcgidWrapper "c:/OpenServer/modules/php/PHP-5.6/php-cgi.exe" .php
</Files>
c:/instantclient_12_1_2 - путь до Oracle Instant Client
c:/OpenServer/modules/php/PHP-5.6 - путь до php
В phpinfo смотрим как собран php
Configure Command cscript /nologo configure.js "--enable-snapshot-build" "--disable-isapi" "--enable-debug-pack" "--without-mssql" "--without-pdo-mssql" "--without-pi3web" "--with-pdo-oci=c:\php-sdk\oracle\x86\instantclient_12_1\sdk,shared" "--with-oci8-12c=c:\php-sdk\oracle\x86\instantclient_12_1\sdk,shared" "--enable-object-out-dir=../obj/" "--enable-com-dotnet=shared" "--with-mcrypt=static" "--without-analyzer" "--with-pgo"
В каталог
c:\php-sdk\oracle\x86\instantclient_12_1\sdk копируем Oracle Instant Client (всё содержимое папки c:\instantclient_12_1_2) (Каталог
c:\php-sdk\oracle\x86\instantclient_12_1\sdk правда неожиданно? Предлагаю разработчика OpenServer сжечь
, или в крайнем случае приковать к креслу пока не пересоберёт php с другими путями
)
В файле c:\OpenServer\modules\php\PHP-5.6\php.ini
раскомментируем строку
extension=php_oci8_12c.dll
Перезапускаем OpenServer
Смотрим phpinfo
Ищем
OCI8 Support enabled
Если находим всё хорошо.
Создаем php-файл для проверки
<?php
if ($c=OCILogon("hr", "oracle", "//192.168.1.10:1521/orcl"))
/* Логин\пароль "по вкусу" */
{
echo "Successfully connected to Oracle.\n";
OCILogoff($c);
} else {
$err = OCIError();
echo "Oracle Connect Error " . $err[text];
}
?>
или
<?php
error_reporting(E_ALL);
ini_set('display_errors', 'On');
$conn = oci_connect('hr', 'oracle', "//192.168.1.10:1521/orcl");
/* Логин\пароль "по вкусу" */
$stid = oci_parse($conn, 'select * from jobs');
oci_execute($stid);
echo "<table>\n";
while (($row = oci_fetch_array($stid, OCI_ASSOC+OCI_RETURN_NULLS)) != false) {
echo "<tr>\n";
foreach ($row as $item) {
echo " <td>".($item !== null ? htmlspecialchars($item, ENT_QUOTES) : " ")."</td>\n";
}
echo "</tr>\n";
}
echo "</table>\n";
?>
Вот и всё!
На этот мануал убил половину новогодних праздников (Не повторяйте мою ошибку
).
Если что-то не ясно. Пишите, отвечу в комментах ниже.