在 macOS 下给 PHP@8.1 安装 redis 的时候出现的错误。

andyzu

问题描述

运行了
pecl install igbinary
pecl install redis
也根据提示在 php.ini 里加上了 redis.so
但是现在运行任何带有 php 开头的命令,都会出现如下提示。

Warning: PHP Startup: Unable to load dynamic library '/usr/local/Cellar/php/8.1.13/pecl/20210902/redis.so' (tried: /usr/local/Cellar/php/8.1.13/pecl/20210902/redis.so (dlopen(/usr/local/Cellar/php/8.1.13/pecl/20210902/redis.so, 0x0009): symbol not found in flat namespace (_igbinary_serialize)), /usr/local/lib/php/pecl/20210902//usr/local/Cellar/php/8.1.13/pecl/20210902/redis.so.so (dlopen(/usr/local/lib/php/pecl/20210902//usr/local/Cellar/php/8.1.13/pecl/20210902/redis.so.so, 0x0009): tried: '/usr/local/lib/php/pecl/20210902//usr/local/Cellar/php/8.1.13/pecl/20210902/redis.so.so' (no such file))) in Unknown on line 0

求大神给与帮助!
这个是 so 文件的路径
截图
这个是 php.ini 指明 so 的路径。
截图
这个是 extension 加载
截图

1970 7 0
7个回答

liziyu

精神上支持你!
建议直接用集成环境,如: MAMP。

又有心跳

redis.so.so,那是系统自动加的.so后缀了吧,你ini里把.so后缀去掉呢,而且明显你看报错信息路径也添加多了呀,把多余路径删除了.你至少要把ini配置的截图和redis.so的实际路径发出来吧

  • andyzu 2022-12-08

    已经更新了主贴,拜托大神帮忙看看!跪谢!

  • 又有心跳 2022-12-09

    我没有mscos,不好意思,打扰. 你能看看别的或者自带的.so扩展 ,他们是怎么添加的吗,我觉得你可以把那个redis.so之类的复制到之前的扩展目录中

  • andyzu 2022-12-12

    我参考了其他的,但是也不行,比如我参考了 PHP 的 xcache.so

powerbowen

用docker吧,方便快捷

  • andyzu 2022-12-08

    我用docker 着呢,用的是 laradock 。
    我在 docker 里启动 webman ,但是在浏览器里打不开,我只能在docker 外启动 webman , 但是连接不到docker里的 redis ,郁闷!!所以只能在 macOS 自带的PHP里装 redis 组件。

  • powerbowen 2022-12-09

    你是不是端口没有映射出来啊

  • andyzu 2022-12-12

    求如何映射?

yzh52521

我都是下载包自己编译安装的 没有问题

  • andyzu 2022-12-08

    问题是我 pecl uninstall redis 也不行。55555

nitron

php.ini里写

extension=redis

不是

extension=redis.so
  • andyzu 2022-12-08

    已经改了,但是还是报错。

北月

symbol not found in flat namespace (_igbinary_serialize))

这是扩展的加载顺序问题,redis.so 需要在 igbinary.so 之后加载,就像 event.so 需要写到sockets.so 之后一样,这里边有一些依赖问题。

另外请确保 igbinary.so 被正确加载到了,执行 php --ri igbinary 查看。

如果已经加载了,再查看你的 php.ini 文件或者其他扩展的配置文件,是否已经添加了 extension=redis.so,如果有就删掉,然后写到 extension=igbinary.so 之后。

还有最重要的就是要注意一下 cliPHP 版本,系统是否安装了多个 PHP,如果有多个 PHP,请确保当前环境变量的 PHP 和 你写的那个 php.ini 文件对应上了。

最后......

最后......

如果还是不行,那么就重装 PHP-CLI 吧。

  • andyzu 2022-12-12

    按照您的提示现在已经变成:
    PHP Warning: Module "igbinary" is already loaded in Unknown on line 0

    Warning: Module "igbinary" is already loaded in Unknown on line 0
    PHP Warning: Module "redis" is already loaded in Unknown on line 0

    Warning: Module "redis" is already loaded in Unknown on line 0
    Configuration File (php.ini) Path: /usr/local/etc/php/8.1
    Loaded Configuration File: /usr/local/etc/php/8.1/php.ini
    Scan for additional .ini files in: /usr/local/etc/php/8.1/conf.d
    Additional .ini files parsed: /usr/local/etc/php/8.1/conf.d/ext-igbinary.ini,
    /usr/local/etc/php/8.1/conf.d/ext-opcache.ini,
    /usr/local/etc/php/8.1/conf.d/ext-redis.ini

  • andyzu 2022-12-12

    但是我检查 php.ini 里,只包含过一次:
    ; extension="/usr/local/Cellar/php/8.1.13/pecl/20210902/redis"
    extension=igbinary
    extension=redis
    ;
    ;extension=bz2
    ;extension=curl
    ;extension=ffi
    ;extension=ftp
    ;extension=fileinfo
    ;extension=gd
    ;extension=gettext
    ;extension=gmp
    ;extension=intl
    ;extension=imap
    ;extension=ldap
    ;extension=mbstring
    ;extension=exif ; Must be after mbstring as it depends on it
    ;extension=mysqli
    ;extension=oci8_12c ; Use with Oracle Database 12c Instant Client
    ;extension=oci8_19 ; Use with Oracle Database 19 Instant Client
    ;extension=odbc
    ;extension=openssl
    ;extension=pdo_firebird
    ;extension=pdo_mysql
    ;extension=pdo_oci
    ;extension=pdo_odbc
    ;extension=pdo_pgsql
    ;extension=pdo_sqlite
    ;extension=pgsql

北月

php-cli 会先加载 /usr/local/etc/php/8.1/php.ini 这个配置文件,然后扫描 /usr/local/etc/php/8.1/conf.d 这个目录下的 .ini 文件,读取配置。

Scan for additional .ini files in: /usr/local/etc/php/8.1/conf.d
Additional .ini files parsed: /usr/local/etc/php/8.1/conf.d/ext-igbinary.ini

这不是明显已经有了吗

  • 北月 2022-12-12

    最简单的检查方式

    find /usr/local/etc/php/8.1 -name "*.ini" | xargs grep "extension=igbinary"

    find /usr/local/etc/php/8.1 -name "*.ini" | xargs grep "extension=redis"

年代过于久远,无法发表回答
🔝