Подключение к базе данных Oracle 18c с помощью OCI8

Я настроил базу данных Oracle 18c и пытаюсь подключиться к ней из php-файла, но когда я запускаю простой тест подключения, я получаю сообщение об ошибке сервера, когда он не может подключиться. Я запустил print_r(getLoaded_extensions());, и из выходного массива видно, что в настоящее время я не использую расширение oci8, как хотел. Мой тестовый файл подключения содержит следующее

#!/usr/local/bin/php
<?php
putenv("ORACLE_HOME=/usr/lib/oracle/18.3/client64")

    $db = "(DESCRIPTION=(ADDRESS_LIST = (ADDRESS = (PROTOCOL = TCP)(HOST = ***.***.*.**)(PORT = 1521)))(CONNECT_DATA=(SID=orcl)))" ;

    if ($c = OCILogon("username", "password", $db))
    {
        echo "Successfully connected to Oracle.\n";
        OCILogoff($c);
    }
    else
    {
        $err = OCIError();
        echo "Connection failed." . $err[text];
    }

Я не уверен, правильно ли я установил свой putenv() в правильное расположение файла oci.dll или мне нужно установить расширение в первую очередь. Спасибо

🤔 А знаете ли вы, что...
PHP позволяет встраивать код в HTML-страницы с использованием специальных тегов <?php ?>.


1 636
2

Ответы:

Скорее всего, установка 18c по умолчанию создает Container DB (CDB) с именем ORCL и PDB1 (подключаемая DB). Запустите lsnrctl stat для поиска созданных служб. затем при подключении к БД используйте для подключения имя_службы вместо SID. Значение service_name можно увидеть в выводе lsnrctl stat.

Пример.

 $db = "(DESCRIPTION =
        (ADDRESS = (PROTOCOL = TCP)(HOST = patronus.domain.com)(PORT = 1521))
        (CONNECT_DATA =
          (SERVER = DEDICATED)
          (SERVICE_NAME = pdb1.domain.com)
        )
      )" ;

Решено

Поскольку вы сказали, что проверили используемые в настоящее время расширения, а OCI8 отсутствует, я бы установил модуль и включил его на вашем сервере.