Страница 2 из 2

Re: Подружить Oracle и PHP

Добавлено: 09 янв 2016, 19:01
Orion55
Спасибо, за утилитку, разобрался и без неё.
На другом форуме дали руководство от Оракла.
Оказалось нужен ещё модуль апача и его настроить и клиента Оракла необходимо копировать в строго отведенное место. Много нюансов и деталей.
Если интересно могу написать и разместить минимануал, как подключиться к Ораклу из Опенсервера. Нужно?

Re: Подружить Oracle и PHP

Добавлено: 09 янв 2016, 19:09
NEGr
Доброго времени суток. Нужно. Скинте, если не сложно

Re: Подружить Oracle и PHP

Добавлено: 09 янв 2016, 19:48
yarik.lev
Orion55 писал(а):Спасибо, за утилитку, разобрался и без неё.
На другом форуме дали руководство от Оракла.
Оказалось нужен ещё модуль апача и его настроить и клиента Оракла необходимо копировать в строго отведенное место. Много нюансов и деталей.
Если интересно могу написать и разместить минимануал, как подключиться к Ораклу из Опенсервера. Нужно?
Спасибо, я себе накрутил рабочий вариант в те дни, когда открыл тему, хотя почитать просто интересно)
И да, я смог запустить только установив админку оракл и прописав дсн, а не инстант клиент, так что этот пункт особенно интересно посмотреть

Re: Подружить Oracle и PHP

Добавлено: 09 янв 2016, 20:17
Orion55
Процесс подключения разбивается на 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) : "&nbsp;")."</td>\n";
    }
    echo "</tr>\n";
}
echo "</table>\n";

?>
Изображение
Вот и всё!
На этот мануал убил половину новогодних праздников (Не повторяйте мою ошибку :-) ).
Если что-то не ясно. Пишите, отвечу в комментах ниже.

Re: Подружить Oracle и PHP

Добавлено: 09 янв 2016, 20:22
Orion55
yarik.lev писал(а): Спасибо, я себе накрутил рабочий вариант в те дни, когда открыл тему, хотя почитать просто интересно)
Во! Напиши свой мануал, но ключевое - база данных находится на удаленном сервере и основная и тестовая.

Re: Подружить Oracle и PHP

Добавлено: 09 янв 2016, 21:50
Максим
Orion55, какой мрак :( Уж простите, не удержался. Поднимать php FastCGI ради того чтобы просто прописать PATH это конечно жесть. Но за старания нужно похвалить :D

Всё что вам нужно было сделать это скопировать Oracle Instant Client в любую папку и добавить путь к этой папке в path.txt включив опцию "Свой path" + "userdata\config\path.txt" в настройках Open Server. Плюс раскомментировать расширение в кофиге PHP. Всё.

И да, те пути, за которые вы собирались меня сжечь на стуле, они во первых не мои (дистрибутивы php берутся с официального сайта, сам я PHP не компилирую), а во вторых они никакой роли в работе PHP не играют и просто обозначают путь откуда бралась библиотека при компилировании расширения. Т.е. по сути это бесполезная информация, больше никогда так не делайте ;)

Re: Подружить Oracle и PHP

Добавлено: 09 янв 2016, 23:17
Orion55
Максим, насчет сжечь - это шутка :-) я с 24 декабря пытаюсь подружить php и oracle - информация мягко говоря искажена, единственный корректный ответ от самого Оракла, который и предполагает поставить FastCGI.
А пост я исправлю, т.к. в сети годных мануалов нет :-)

Re: Подружить Oracle и PHP

Добавлено: 09 янв 2016, 23:25
Orion55
Настройка OpenServer
Всё банально
Максим писал(а):Всё что вам нужно было сделать это скопировать Oracle Instant Client в любую папку и добавить путь к этой папке в path.txt включив опцию "Свой path" + "userdata\config\path.txt" в настройках Open Server. Плюс раскомментировать расширение в кофиге PHP. Всё.
В файле c:\OpenServer\userdata\config\path.txt пишем c:\instantclient_12_1_2

В файле c:\OpenServer\modules\php\PHP-5.6\php.ini
раскомментируем строку
extension=php_oci8_12c.dll
Перезапускаем OpenServer.
Всё!

Re: Подружить Oracle и PHP

Добавлено: 31 май 2016, 20:53
dake
Всем привет! Всё получилось. Спасибо большое за мануал)) Вот еще вопрос... какие нужно выставить кодировки.. и где...чтобы в результате не было знаков вопроса. Настройки сервера вот такие:
NLS_NCHAR_CHARACTERSET AL16UTF16
NLS_LANGUAGE AMERICAN
NLS_TERRITORY AMERICA
NLS_CURRENCY $
NLS_ISO_CURRENCY AMERICA
NLS_NUMERIC_CHARACTERS .,
NLS_CHARACTERSET CL8ISO8859P5
NLS_CALENDAR GREGORIAN
NLS_DATE_FORMAT DD-MON-RR
NLS_DATE_LANGUAGE AMERICAN
NLS_SORT BINARY
NLS_TIME_FORMAT HH.MI.SSXFF AM
NLS_TIMESTAMP_FORMAT DD-MON-RR HH.MI.SSXFF AM
NLS_TIME_TZ_FORMAT HH.MI.SSXFF AM TZR
NLS_TIMESTAMP_TZ_FORMAT DD-MON-RR HH.MI.SSXFF AM TZR
NLS_DUAL_CURRENCY $
NLS_COMP BINARY
NLS_LENGTH_SEMANTICS BYTE
NLS_NCHAR_CONV_EXCP FALSE
NLS_RDBMS_VERSION 10.2.0.4.0
заранее спасибо!

Re: Подружить Oracle и PHP

Добавлено: 13 июн 2019, 19:53
dgoryaev
Добрый вечер. Подскажите, пожалуйста, на какую ОС вы устанавливали оракл клиент?