docker 无法加载控制器-Imgur(PHP 7.2)

zf2sa74q  于 2022-11-03  发布在  Docker
关注(0)|答案(6)|浏览(137)

由于PHP 7.1到PHP 7.2的更新,我不能安装oci 8.我有这个错误:
您可以在这里找到您的密码。
PHP警告:PHP启动:无法加载模块“faviconoci8.so”(已尝试:/txtxtxtxtxtxtxtxtxtxtxtxtxtxtxtxtxtxtxtxtxtxtxtxtxtxtxtxtxtxtxtxtxtxtxtxtxtxtxtxtxtxtxtxtxtxtxtxtxtxtxtxtxtxtxtxtxtxtxtxtxtxtxtxtxtxtxtxtxtxtxtxtxtxtxtxtxtxtxtxtxtxtxtxtxtxtxtxtxtxtxt无法打开共享对象文件:没有这样的文件或目录),/usr/local/lib/php/extensions/no-debug-non-zts-20170718/oci8.so.so(/usr/local/lib/php/extensions/no-debug-non-zts-20170718/oci8.so.so:无法打开共享对象文件:在第0行的Unknown中没有这样的文件或目录
PHP 7.2.0(客户端)(构建版本:(NTS)版权所有(c)1997-2017 PHP Group Zend Engine v3. 2. 0,版权所有(c)1998-2017 Zend Technologies与Zend OPcache v7. 2. 0,版权所有(c)1999-2017,由Zend Technologies提供
我正在使用Docker环境,我为此创建了一个github存储库,如果我使用PHP(shenron/docker-php-fpm:7.2)的版本7.1,它就可以工作。
我不明白为什么脚本要尝试启动这个文件:/usr/local/lib/php/extensions/no-debug-non-zts-20170718/oci8.so.so .
我的观点有两种可能性;或者pecl今天不能安装oci 8。
有人有同样的问题吗?
谢谢你的帮助。

jm81lzqq

jm81lzqq1#

/usr/local/lib/php/extensions/no-debug-non-zts-20170718/oci8.so.so只是对共享库文件名的第二种猜测。您可以放心地忽略它。
实际的问题是:(tried: /usr/local/lib/php/extensions/no-debug-non-zts-20170718/oci8.so (libmql1.so: cannot open shared object file: No such file or directory)
oci8.so本身依赖于多个共享库,可以使用ldd来找出哪些共享库:

ldd /usr/local/lib/php/extensions/no-debug-non-zts-20170718/oci8.so
    linux-vdso.so.1 (0x00007ffc8bfe7000)
    libclntsh.so.12.1 => /usr/local/instantclient/libclntsh.so.12.1 (0x00007fb9919e0000)
    libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007fb991641000)
    libmql1.so => not found
    libipc1.so => not found
    libnnz12.so => not found
    libons.so => not found
    libdl.so.2 => /lib/x86_64-linux-gnu/libdl.so.2 (0x00007fb99143d000)
    libm.so.6 => /lib/x86_64-linux-gnu/libm.so.6 (0x00007fb991139000)
    libpthread.so.0 => /lib/x86_64-linux-gnu/libpthread.so.0 (0x00007fb990f1c000)
    libnsl.so.1 => /lib/x86_64-linux-gnu/libnsl.so.1 (0x00007fb990d04000)
    librt.so.1 => /lib/x86_64-linux-gnu/librt.so.1 (0x00007fb990afc000)
    /lib64/ld-linux-x86-64.so.2 (0x00007fb994bc8000)
    libaio.so.1 => /lib/x86_64-linux-gnu/libaio.so.1 (0x00007fb9908fa000)
    libclntshcore.so.12.1 => not found

这些.so文件似乎是存储库中zip文件的一部分。像LD_LIBRARY_PATH=/usr/local/instantclient_12_1/ php这样运行PHP在容器中可以很好地工作。您需要将这些so文件移动到一个正常的位置。

iecba09b

iecba09b2#

对于任何遇到这个问题的人,这里是在linux中处理它的正确方法。(我在下面的演示中使用了CentOS命令,但Ubnutu应该也没有什么不同)

步骤1:获取Oracle库

编辑:感谢Christopher Jones的评论,您可以在https://yum.oracle.com/repo/OracleLinux/OL7/oracle/instantclient/x86_64/上找到直接的rpm链接

wget oracle-instantclient18.3-basic-18.3.0.0.0-1.x86_64.rpm 
wget oracle-instantclient18.3-devel-18.3.0.0.0-1.x86_64.rpm

第二步:安装了

yum install oracle-instantclient18.3-basic-18.3.0.0.0-1.x86_64.rpm
yum install  oracle-instantclient18.3-devel-18.3.0.0.0-1.x86_64.rpm

步骤3:configure(使oracle库的路径可被发现)

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

测试编号

php -v

# and you should get something like

PHP 7.2.12 (cli) (built: Nov  6 2018 16:40:25)...
jutyujz0

jutyujz03#

如果运行ldd /usr/local/lib/php/extensions/no-debug-non-zts-20170718/oci8.so会得到如下所示的结果,但缺少文件:

ldd /usr/local/lib/php/extensions/no-debug-non-zts-20170718/oci8.so
    linux-vdso.so.1 (0x00007ffc8bfe7000)
    libclntsh.so.12.1 => /usr/local/instantclient/libclntsh.so.12.1 (0x00007fb9919e0000)
    libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007fb991641000)
    libmql1.so => not found
    libipc1.so => not found
    libnnz12.so => not found
    libons.so => not found
    libdl.so.2 => /lib/x86_64-linux-gnu/libdl.so.2 (0x00007fb99143d000)
    libm.so.6 => /lib/x86_64-linux-gnu/libm.so.6 (0x00007fb991139000)
    libpthread.so.0 => /lib/x86_64-linux-gnu/libpthread.so.0 (0x00007fb990f1c000)
    libnsl.so.1 => /lib/x86_64-linux-gnu/libnsl.so.1 (0x00007fb990d04000)
    librt.so.1 => /lib/x86_64-linux-gnu/librt.so.1 (0x00007fb990afc000)
    /lib64/ld-linux-x86-64.so.2 (0x00007fb994bc8000)
    libaio.so.1 => /lib/x86_64-linux-gnu/libaio.so.1 (0x00007fb9908fa000)
    libclntshcore.so.12.1 => not found

您可以将文件夹添加到ldconfig中,如下所示(其他读者-您的路径可能会有所不同):

echo /usr/local/instantclient_12_1/ > /etc/ld.so.conf.d/oracle-instantclient.conf

然后运行ldconfig以读取新配置。

6qqygrtg

6qqygrtg4#

将此添加到我的Dockerfile:


# Install Oracle instantclient and oci8 extension

RUN mkdir /opt/oracle \
    && curl 'https://download.oracle.com/otn_software/linux/instantclient/19600/instantclient-basic-linux.x64-19.6.0.0.0dbru.zip' --output /opt/oracle/instantclient-basic-linux.zip \
    && curl 'https://download.oracle.com/otn_software/linux/instantclient/19600/instantclient-sdk-linux.x64-19.6.0.0.0dbru.zip' --output /opt/oracle/instantclient-sdk-linux.zip \
    && unzip '/opt/oracle/instantclient-basic-linux.zip' -d /opt/oracle \
    && unzip '/opt/oracle/instantclient-sdk-linux.zip' -d /opt/oracle \
    && rm /opt/oracle/instantclient-*.zip \
    && mv /opt/oracle/instantclient_* /opt/oracle/instantclient \
    && docker-php-ext-configure oci8 --with-oci8=instantclient,/opt/oracle/instantclient \
    && docker-php-ext-install oci8 \
    && echo /opt/oracle/instantclient/ > /etc/ld.so.conf.d/oracle-insantclient.conf \
    && ldconfig

同时也需要安装liba101。

syqv5f0l

syqv5f0l5#

我也有同样的问题
“php -v
PHP警告:PHP启动:无法加载模块“oci8.so”(已尝试:/usr/favicon. ico)无法加载模块:无法打开共享对象文件:/usr/lib/php/20190902/ www.example.com(没有这样的文件或目录)、/usr/lib/php/20190902/ www.example.com(没有这样的文件或目录)、oci8.so.so/usr/lib/php/20190902/oci8.so.so:无法打开共享对象文件:在第0行的Unknown中没有这样的文件或目录))”
我用下面的命令解决了这个问题

apt-get安装libaio 1

按照此教程完成https://gist.github.com/milo/d4a15d67e6538bf82438babc39482b80安装

mnemlml8

mnemlml86#

我遇到了php 8的问题:我创建了文件etc/apache/envvars在其中,我写道:数据库管理系统的数据库管理系统的数据库管理系统
然后,重要的是,如何重新启动Apache(在我的例子中,systemctl重新启动不起作用)。apache 2ctl停止apache 2ctl启动
......一切都好。

相关问题