Использование неопределенной константы OCI_CRED_EXT - предполагается, что 'OCI_CRED_EXT' laravel

Я пытаюсь подключить базу данных oracle к моему приложению laravel с помощью этого пакета: https://github.com/yajra/laravel-oci8 но с ошибкой внешнего соединения, это ошибка:

Вот строка ошибки в пакете: https://github.com/yajra/laravel-oci8/blob/5.8/src/Oci8/Connectors/OracleConnector.php

Сведения о системе

  • Операционная система: macOS Mojave Version 10.14.4 (18E226)
  • Версия PHP: 7.3
  • Версия Laravel: 5.8.*
  • Версия Laravel-OCI8: 5.8.*

Кто-нибудь может мне помочь, пожалуйста?

3 ответа

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

  1. Правильно скомпилировано в PHP (см. https://www.orware.com/blog/tips-and-how-tos/oracle/oracle-oci8-php-installation)

  2. Динамически загружается во время выполнения. Вы можете проверить это в своем скрипте, и пример того, как это сделать, показан здесь: https://www.sitepoint.com/php-extension-not-loaded/

Ужасающе мало руководств о том, как выполнить эту установку, что привело к большой головной боли при установке на новые серверы.

Итак, вот краткое изложение того, как установить это на сервере ubuntu 20.04.

РЕДАКТИРОВАТЬ: У меня нет Mac ...
... но команды должны быть очень похожими. По крайней мере, быстрый Google покажет несколько руководств по установке необходимых компонентов.
Вам также может потребоваться выяснить различные места установки php (/ etc / php для linux).
Вот руководство по установке расширений php для некоторых из этих деталей: https://affinitybridge.com/blog/adding-php-extensions- система-PHP-под-OS-X-1015-каталина

обратите внимание, что вы можете использовать разные версии Instantclient и PHP

предпосылки:

      apt-get install unzip php-pear php7.4-dev
  1. Загрузите мгновенный клиент из oracle. https://www.oracle.com/database/technologies/instant-client/downloads.html . Вы ищете "базовые" и "sdk" загрузки для вашей системы / версии.
  2. разархивируйте их в каталог. Я использую / opt / oracle.
            unzip /instantclient-basic.zip -d /opt/oracle
    unzip /instantclient-sdk.zip -d /opt/oracle 
    
  3. библиотеки символических ссылок
            ln -s /opt/oracle/instantclient_11_2/libclntsh.so.11.1 /opt/oracle/instantclient_11_2/libclntsh.so
    ln -s /opt/oracle/instantclient_11_2/libocci.so.11.1 /opt/oracle/instantclient_11_2/libocci.so 
    
  4. убедитесь, что файл oci.ini существует в каталоге доступных модов
            echo 'extension=oci8.so' > /etc/php/7.4/mods-available/oci.ini
    
  5. символическая ссылка на файлы расширения.
            ln -s /etc/php/7.4/mods-available/oci.ini /etc/php/7.4/cli/conf.d/10-oci8.ini
    ln -s /etc/php/7.4/mods-available/oci.ini /etc/php/7.4/fpm/conf.d/10-oci8.ini 
    
  6. определить необходимые переменные среды
            ORACLE_HOME=/opt/oracle/instantclient_11_2/
    LD_LIBRARY_PATH=/opt/oracle/instantclient_11_2/
    
  7. установить расширение
            echo "instantclient,$ORACLE_HOME" | pecl install oci8-2.2.0
    
  8. убедитесь, что ld знает о Oracle
            echo $ORACLE_HOME > /etc/ld.so.conf.d/oracle-instantclient.conf
    ldconfig
    
  9. убирать
            rm -rf /instantclient-*.zip \
    

Проблема, на которой я постоянно зацикливался, была связана только с настройкой расширения для php cli ИЛИ php fpm, а не с тем и другим сразу. Если вы не настроите его для обоих, вы где-то увидите постоянную ошибку OCI.

ТАК, не пропускайте шаг 5.;)

PS Если вы обнаружите, что зациклились на чем-то, давайте поработаем вместе и обновим этот ответ, чтобы мы все могли быть счастливее, установив это расширение.

В твоем php.ini найдите и раскомментируйте следующую строку.

extension=oci8_12c

Затем перезапустите свой веб-сервер. И / или контейнер PHP - если вы его используете, например php-fpm, hhvm.

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