Как заставить работать PHP с Oracle?

Статус
В этой теме нельзя размещать новые ответы.

Ireruss

Новичок
Как заставить работать PHP с Oracle?

OC: Windows 2003
БД: Oracle 9.2
(устанавливали "специально обученные люди" со стандартным клиентом)

Web-сервер: Apache 2.2.11 (win32-x86)
PHP 5.2.0 (win32)
(ставил, настраивал сам так как описано, например, в FAQ phpclub`а )

тестовый пример выдает:
Fatal error: Call to undefined function oci_connect() in D:\Apache\htd\test.php on line 13

extension_dir - прописан верно и
extension = php_oci8.dll раскомментировано.
Посмотрел зависимости php_oci8.dll - не удовлетворяется по oci.dll.
Соответственно php_oci8.dll не грузится, что видно и по выводу phpinfo().

Заменил стандартную oci.dll на такую же из Oracle Instant Client. Зависимости - удовлетворены. php_oci8.dll грузится, подключается. phpinfo() пишет:

oci8
OCI8 Support enabled Version 1.2.2
Revision $Revision: 1.269.2.16.2.25 $
Active Persistent Connections 0
Active Connections 0
Temporary Lob support enabled
Collections support enabled

Directive - Local Value - Master Value
oci8.default_prefetch 10 10
oci8.max_persistent -1 -1
oci8.old_oci_close_semantics 0 0
oci8.persistent_timeout -1 -1
oci8.ping_interval 60 60
oci8.privileged_connect Off Off
oci8.statement_cache_size 20 20
тестовый пример выдает:
Warning: oci_connect() [function.oci-connect]: OCIEnvNlsCreate() failed. There is something wrong with your system - please check that PATH includes the directory with Oracle Instant Client libraries in D:\Apache\htd\test.php on line 13

Warning: ocierror() [function.ocierror]: OCIError: unable to find error handle in D:\Apache\htd\test.php on line 19

Notice: Use of undefined constant code - assumed 'text' in D:\Apache\htd\test.php on line 20
Oracle Connect Error

Тестовый пример стандартный:
PHP:
<?php
   if ($c=OCILogon("scott", "tiger", "orcl")) {     
      echo "Successfully connected to Oracle.\n";
      OCILogoff($c);
   } 
   else {
      $err = OCIError();
      echo "Oracle Connect Error " . $err[text];
   }
?>
Гугл ничего не присоветовал :-(
Instant Client админ Оракла ставить категорически отказывается.

Есть ли возможность заставить работать PHP с Oracle через стандартный клиент или без установки Instant Client`а никак?
Почему не работают ф-ии oci8 и при замене стандартной библиотекиoci.dll на аналог из Instant Client`а?
Может я вообще что-то не то делаю?

P.S. Си-шные программы работают на этом сервере с Ораклом через oci без проблем со стандартным клиентом.
 

флоппик

promotor fidei
Команда форума
Партнер клуба
Можно, но нужно будет плясать в сторону настройки апача, который должен корректно передавать NLS-окружение.
Выходов, соотвественно, три:

1.Передавать кодировку четвертым параметром, примерно так: oci_connect($user, $pass, $instance, 'RUSSIAN_CIS.CL8MSWIN1251');
2.Установить переменную окружения NLS_LANG и заставить ее передаватся в апач и дальше.(что то вроде export NLS_LANG="Russian.AL32UTF8") (У меня почему то это переставало работать через пару часов и надо было рестартить апач, но это было давно)
3.Установить Zend Server, который корректно для этого настроен. =)

Ну, если у вас другая кодировка, отличающаяся от приведенных мной - чуток покопать оракловый мануал %)
 

Ireruss

Новичок
Настройка NSL_LANG - не помогла.
Zend Server при попытке скачивания требует авторизацию. Не рискнул.
:(

-~{}~ 23.01.10 13:15:

Поставил Oracle Instant Client. :(
Зарработало.
 

kurOK

Новичок
Не знал куда написать...
В хорошей статье Oracle / PHP FAQ замечены ошибки:

Самый первый код:

PHP:
<html> 
<p>If PHP is working, you will see "Hello World" below:<hr> 
<? php 
   echo "Hello world"; 
   phpinfo();  // Print PHP version and config info 
?> 
</html>
Ошибка: пробел в третьей строчке "<? php"

Также, в самом начале статьи повторяющееся слово "автор": "Автор: Автор: Frank Naude".
 
Статус
В этой теме нельзя размещать новые ответы.
Сверху