Как подключить PHP 7.x к базе данных Oracle на RedHat/CentOS?

Я изо всех сил пытаюсь подключить свое PHP-приложение к базе данных Oracle. Я пробовал несколько вариантов за последнюю неделю, но безуспешно.

Мне удалось установить расширение oci8, но функция oci_connect не распознается.

Пожалуйста помогите.

RedHat Enterprise Linux 7.6
PHP: 7.3
Оракул: 12c

Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
1
0
5 560
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

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

Эти инструкции относятся к установкам RedHat/CentOS Linux. По моему опыту, инструкции для RedHat/CentOS немного отличались от других установок Linux. ИЗБЕГАЙТЕ указаний Oracle... Они совсем не помогли!

Шаг 1: Я следовал инструкциям на этом замечательном веб-сайте, чтобы установить PHP 7.3 и дополнительные RPM-пакеты Remi: https://tecadmin.net/install-php7-on-centos7/.

Шаг 2: Затем я использовал репозиторий Remi (см. шаг 1) для установки расширения oci8:

$ sudo yum --enablerepo=remi-php73 install php-oci8

Шаг 3: Теперь нам нужно установить пакеты мгновенного клиента oracle 18.3. Это очень хорошо объяснено на этом сайте: https://qiita.com/tkprof/items/2a4eb868f45fb5759110

$ cd /etc/yum.repos.d
$ sudo wget http://yum.oracle.com/public-yum-ol7.repo
$ sudo wget http://yum.oracle.com/RPM-GPG-KEY-oracle-ol7
$ sudo rpm --import RPM-GPG-KEY-oracle-ol7
$ sudo yum-config-manager --enable ol7_oracle_instantclient
$ sudo yum install oracle-instantclient18.3-basic
$ sudo yum install oracle-instantclient18.3-devel
$ sudo yum install oracle-instantclient18.3-jdbc
$ sudo yum install oracle-instantclient18.3-sqlplus
$ sudo yum list oracle-instantclient*

Шаг 4: Файлы оракула были созданы в /usr/lib/oracle/18.3 Теперь нам нужно создать символическую ссылку, чтобы файлы оракула включались при запуске сервера:

$ sudo sh -c "echo /usr/lib/oracle/18.3/client64/lib > /etc/ld.so.conf.d/oracle-instantclient.conf"
$ sudo ldconfig

Шаг 5: Перезапустите сервер

 $ sudo systemctl stop httpd
 $ sudo systemctl start httpd

Шаг 6: Теперь мы можем создать простой файл php, который проверяет подключение к Oracle:

<?php     
$conn = oci_connect("username", "password", "//url/SID");

if (!$conn) {
    echo "oci8 working! However the following errors occurred: <br>";
    $m = oci_error();
    echo $m['message'], "\n";
    exit;
} else {
    print "Connected to Oracle!";
}
// Close the Oracle connection
oci_close($conn);

Если вы получите системную ошибку, значит установка не сработала.

Имейте в виду, что следующие версии будут использовать Oracle Client 19.3. "rpm -qi php-oci8" предоставляет эту информацию.

Remi Collet 17.06.2019 14:47

Обновление для последней версии Oracle Instant Client версии 19.3 для PHP-OCI8:

>> wget http://yum.oracle.com/repo/OracleLinux/OL7/oracle/instantclient/x86_64/getPackage/oracle-instantclient19.3-basic-19.3.0.0.0-1.x86_64.rpm
>> wget http://yum.oracle.com/repo/OracleLinux/OL7/oracle/instantclient/x86_64/getPackage/oracle-instantclient19.3-devel-19.3.0.0.0-1.x86_64.rpm
>> wget http://yum.oracle.com/repo/OracleLinux/OL7/oracle/instantclient/x86_64/getPackage/oracle-instantclient19.3-jdbc-19.3.0.0.0-1.x86_64.rpm
>> wget http://yum.oracle.com/repo/OracleLinux/OL7/oracle/instantclient/x86_64/getPackage/oracle-instantclient19.3-sqlplus-19.3.0.0.0-1.x86_64.rpm

>> sudo yum localinstall oracle-instantclient19.3-basic-19.3.0.0.0-1.x86_64.rpm oracle-instantclient19.3-devel-19.3.0.0.0-1.x86_64.rpm oracle-instantclient19.3-jdbc-19.3.0.0.0-1.x86_64.rpm oracle-instantclient19.3-sqlplus-19.3.0.0.0-1.x86_64.rpm

// create symbolic link
eu-onesead-d001 ~]# sudo sh -c "echo /usr/lib/oracle/19.3/client64/lib > /etc/ld.so.conf.d/oracle-instantclient.conf"
eu-onesead-d001 ~]# sudo ldconfig

Перезагрузите сервер

Чтобы проверить соединение, я создал файл php, который загружаю на сервер и проверяю через браузер. ПРИМЕЧАНИЕ: вам, очевидно, следует проявить соответствующую осторожность и удалить файл после тестирования:

<?php
echo "Ensure you have restarted the server if you have installed any new extensions!";
echo "<br>Attempting Oracle db connection...";

// this will open the oracle extension and execute a connection
try {
$conn = oci_connect(
    "username_goes_here",
    "password_goes_here",
    "//oracle_server_address_goes_here/sid_goes_here");

echo "<br>OCI Connect extension found.. opening connnection...";

if (!$conn) {
    echo "<br>Function 'oci_connect' found and working but cannot connect to Oracle: <br>";
    $m = oci_error();
    echo $m['message'], "\n";
    exit;
} else {
    echo "<br>SUCCESS: Connected to Oracle!";
}
} catch (Exception $e) {
    echo $e->getMessage();
}

// Close the Oracle connection
oci_close($conn);
echo "<br>Connection closed";
echo "<br>For security, please delete this file off the server";

Другие вопросы по теме