使用未定义的常量OCI_CRED_EXT-假定为'OCI_CRED_EXT'Laravel

时间:2019-05-13 04:40:24

标签: php laravel oracle oci yajra-datatable

我正在尝试使用以下软件包将oracle数据库连接到我的laravel应用程序:https://github.com/yajra/laravel-oci8,但外部连接有错误,这是错误: enter image description here

这是软件包中的错误行:https://github.com/yajra/laravel-oci8/blob/5.8/src/Oci8/Connectors/OracleConnector.php#L35

系统详细信息

  • 操作系统:macOS Mojave Version 10.14.4 (18E226)
  • PHP版本:7.3
  • Laravel版本:5.8.*
  • Laravel-OCI8版本:5.8.*

有人可以帮助我吗?

2 个答案:

答案 0 :(得分:0)

好像缺少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/

答案 1 :(得分:0)

令人沮丧的是,关于如何进行此安装的教程少之又少,这导致在新服务器上安装此程序时很头疼。

所以,这里有一个关于如何在 ubuntu 20.04 服务器上安装它的快速纲要。

编辑:我没有 Mac...
...但命令应该非常相似。至少,一个快速的谷歌会打开一些关于安装先决条件的教程。
您可能还需要弄清楚不同的 php 安装位置(/etc/php 用于 linux)
以下是有关 php 扩展安装的教程,了解其中一些细节:https://affinitybridge.com/blog/adding-php-extensions-system-php-under-os-x-1015-catalina

请注意,您可能使用不同的 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 文件存在于 mods-available 目录中
    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 如果您发现自己对某事感到厌烦,让我们一起努力更新此答案,以便我们都能更快乐地安装此扩展程序。