настройка php с помощью oracle usin tns в mac os x

#php #oracle #macos

#php #Oracle #macos

Вопрос:

Я новичок в php, но у меня он запущен (php 5.3.3) на моем Mac (OS 10.6). Однако, когда я пытаюсь запустить этот скрипт:

     <?php // Create connection to Oracle
$conn = oci_connect("user", "pass", "tnsnames.ora");
if (!$conn) {
   $m = oci_error();
   echo $m['message'], "n";
   exit;
}
else {
   print "Connected to Oracle!";
}
// Close the Oracle connection
oci_close($conn);
?>
  

Я получаю сообщение об ошибке: «Неустранимая ошибка: вызов неопределенной функции oci_connect() …»

Теперь я проверил веб-сайт oracle и загрузил их instant client, но я застрял в том, что делать дальше. Их инструкции таковы:

На платформах, отличных от Windows, перестройте PHP, используя следующий параметр конфигурации: —with-oci8=shared,instantclient,/path/to/instant/ client /libs Отредактируйте свой файл php.ini и добавьте: расширение = oci8.so Убедитесь, что ваш параметр extension_dir (в php.ini) указывает на местоположение, где oci8.so был установлен. Задайте переменные среды, требуемые Oracle, такие как PATH (Windows) или LD_LIBRARY_PATH (в Linux) Перезапустите веб-сервер.

Но не мог бы кто-нибудь объяснить это мне более простым языком? Я действительно в замешательстве. Я не могу найти oci8.so файл в папке instant client, и я не знаю, куда поместить расширение = oci8.so в файле (все, что у меня есть, это php.ini-production и php.ini-development. И я не знаю, как «перестроить» PHP с помощью параметров конфигурации.

О, и я не знаю, как подключить tnsnames.org файл либо. Правильный ли это путь? Поскольку у меня еще даже нет подключения, я не знаю, сбой это или нет.

Ответ №1:

Вам не нужно имя файла «tnsnames.ora» в вашем вызове oci_connect. Вы хотите указать имя псевдонима подключения к базе данных в файле tnsnames.ora. Файл tnsnames.ora содержит список всех известных подключений к базе данных, идентифицируемых псевдонимами. Для псевдонима базы данных с именем «db_alias» следует использовать этот вызов:

 $conn = oci_connect("user", "pass", "db_alias");
  

Типичная запись tnsnames.ora будет выглядеть примерно так:

 DB_NAME =
  (DESCRIPTION =
    (ADDRESS = (PROTOCOL = TCP)(HOST = foo.bar.com)(PORT = 1521))
    (CONNECT_DATA = (SERVICE = some_db_service_name))
  )
  

В качестве альтернативы вы можете использовать строку Easy Connect:

 $conn = oci_connect("user", "pass", "//host:port/db_service_name");
  

Где host, port и db_service_name должны быть заменены значениями из вашей среды. Итак, для хоста «foo» с базой данных «bar» на стандартном порту 1521 ваше соединение будет выглядеть следующим образом:

 $conn = oci_connect("user", "pass", "//foo:1521/bar");
  

Взгляните на страницу руководства по oci_connect для получения дополнительной информации.

Комментарии:

1. Спасибо за ответ. На самом деле я пытался просто использовать файл tnsnames.ora в виде строки, но я не могу сказать, сработало ли это либо из-за ошибки «Вызов неопределенной функции oci_connect()». Итак, мне нужно сначала настроить php, прежде чем я это протестирую.

2. Взгляните на forums.oracle.com/forums /… и найдите сообщение codrai.

3. этот пост от codrai предназначен для Windows, а я использую Mac.

Ответ №2:

Я делаю это с полной строкой подключения:

 $rnum=rand(0,99999999);
$connect_str = "(DESCRIPTION = (ADDRESS = (PROTOCOL = TCP) (HOST = $dbserver) (PORT = $dbport) (HASH = '.$rnum.') ) (CONNECT_DATA =(SID = $dbname)) )";
$DB = oci_connect($dbuser, $dbpass, $connect_str);
  

Для меня это просто чудо.