【问题标题】:CentOS 7 - PHP Command line - Unable to load dynamic library 'oci8'CentOS 7 - PHP 命令行 - 无法加载动态库 'oci8'
【发布时间】:2021-01-15 05:16:27
【问题描述】:

有没有人在升级到 php 7.2.34 时遇到过这个错误?

在用户目录下运行 php 脚本似乎是一个错误,但对于我来说,我还找不到解决方案。

我假设(对于 linux 不是很好)这是本地用户帐户指向服务器上的错误位置的问题。

它在这里“/usr/lib64/php/modules/oci8” 哪个不存在,但“/usr/lib64/php/modules”包含了我所能知道的所有 .so 文件。

这是对原始 php 7.0 的完全卸载并升级到 7.2

错误

php -v
PHP Warning:  PHP Startup: Unable to load dynamic library 'oci8' (tried: /usr/lib64/php/modules/oci8 (/usr/lib64/php/modules/oci8: cannot open shared object file: No such file or directory), /usr/lib64/php/modules/oci8.so (libclntsh.so.19.1: cannot open shared object file: No such file or directory)) in Unknown on line 0
PHP Warning:  PHP Startup: Unable to load dynamic library 'pdo_oci' (tried: /usr/lib64/php/modules/pdo_oci (/usr/lib64/php/modules/pdo_oci: cannot open shared object file: No such file or directory), /usr/lib64/php/modules/pdo_oci.so (libclntsh.so.19.1: cannot open shared object file: No such file or directory)) in Unknown on line 0
PHP Warning:  PHP Startup: Unable to load dynamic library 'oci8.so' (tried: /usr/lib64/php/modules/oci8.so (libclntsh.so.19.1: cannot open shared object file: No such file or directory), /usr/lib64/php/modules/oci8.so.so (/usr/lib64/php/modules/oci8.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0
PHP 7.2.34 (cli) (built: Jan  4 2021 14:20:18) ( NTS )
Copyright (c) 1997-2018 The PHP Group
Zend Engine v3.2.0, Copyright (c) 1998-2018 Zend Technologies
    with Zend OPcache v7.2.34, Copyright (c) 1999-2018, by Zend Technologies

ls -l /usr/lib64/php/modules的内容

bcmath.so
bz2.so
calendar.so
ctype.so
curl.so
dom.so
exif.so
fileinfo.so
ftp.so
gd.so
gettext.so
iconv.so
intl.so
json.so
ldap.so
mbstring.so
mcrypt.so
mysqli.so
mysqlnd.so
oci8.so
opcache.so
pdo_mysql.so
pdo_oci.so
pdo.so
pdo_sqlite.so
phar.so
posix.so
shmop.so
simplexml.so
sockets.so
sqlite3.so
sysvmsg.so
sysvsem.so
sysvshm.so
tokenizer.so
wddx.so
xmlreader.so
xml.so
xmlwriter.so
xsl.so

任何帮助表示赞赏。

【问题讨论】:

    标签: php linux centos oci8


    【解决方案1】:

    假设您的数据库在远程计算机上,然后在运行 PHP 的计算机上安装 Oracle Instant Client(64 位为 here)并使用 ldconfig 方法设置系统库搜索路径。这显示在页面底部的安装说明中。还要确保已安装 libaio(或 Debian/Ubuntu 上的 libaio1 packge)。

    【讨论】:

    • 看起来我已经安装并通过 CLI 工作了。现在,Web 界面似乎无法正常工作并不断抛出错误 -> 尝试调用函数“oci_connect”。我可以通过 cli 以与 Web 服务器运行相同的用户名运行它。您是否偶然对开始研究该问题有什么建议?到目前为止,我的 google fu 还不够。
    • 如果您使用的是 Oracle Instant Client,则使用 ldconfig(如安装说明中所示)设置系统范围的库搜索路径。我希望 PHP 在命令行中工作,因为您设置了 LD_LIBRARY_PATH。您可以弄清楚如何为 Apache 设置 LD_LIBRARY_PATH,但使用 ldconfig 更容易。 (别忘了重启 Apache)
    • 谢谢,所以,我安装了 Instantclient 21.1,不确定这是否导致问题或愚蠢的事情。它不适用于 ldconfig 步骤。 sudo sh -c "echo /opt/oracle/instantclient_21 > \ /etc/ld.so.conf.d/oracle-instantclient.conf" 它努力将其编码到我的脚本中或为系统设置环境变量。最后将其添加到 httpd 配置文件并重新启动 apache,它现在可以在网络上运行。 (/etc/sysconfig/httpd -> LD_LIBRARY_PATH=/opt/oracle/instantclient_21_1)。不是 100% 确定这是否是正确的做法?它似乎对两者都有效。
    • 您认为这样设置是否安全?或者在安装过程中有什么我可能想念的东西吗? (假设我按照页面底部的步骤操作,但将其更改为版本 21。oracle.com/database/technologies/instant-client/…
    • 您没有提供足够的详细信息,例如您使用的是 RPM 还是 ZIP,我不知道您的错误或什么“不起作用”让我评论最佳实践,但更新 sysconfig /httpd 一般没问题。
    猜你喜欢
    • 2018-03-20
    • 1970-01-01
    • 1970-01-01
    • 2016-06-23
    • 2023-02-12
    • 2019-04-03
    • 1970-01-01
    • 1970-01-01
    • 2015-03-01
    相关资源
    最近更新 更多