运行了
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 加载
精神上支持你!
建议直接用集成环境,如: MAMP。
5555555555555
redis.so.so,那是系统自动加的.so后缀了吧,你ini里把.so后缀去掉呢,而且明显你看报错信息路径也添加多了呀,把多余路径删除了.你至少要把ini配置的截图和redis.so的实际路径发出来吧
已经更新了主贴,拜托大神帮忙看看!跪谢!
我没有mscos,不好意思,打扰. 你能看看别的或者自带的.so扩展 ,他们是怎么添加的吗,我觉得你可以把那个redis.so之类的复制到之前的扩展目录中
我参考了其他的,但是也不行,比如我参考了 PHP 的 xcache.so
用docker吧,方便快捷
我用docker 着呢,用的是 laradock 。
我在 docker 里启动 webman ,但是在浏览器里打不开,我只能在docker 外启动 webman , 但是连接不到docker里的 redis ,郁闷!!所以只能在 macOS 自带的PHP里装 redis 组件。
你是不是端口没有映射出来啊
求如何映射?
我都是下载包自己编译安装的 没有问题
问题是我 pecl uninstall redis 也不行。55555
php.ini里写
不是
已经改了,但是还是报错。
这是扩展的加载顺序问题,
redis.so
需要在igbinary.so
之后加载,就像 event.so 需要写到sockets.so 之后一样,这里边有一些依赖问题。另外请确保
igbinary.so
被正确加载到了,执行php --ri igbinary
查看。如果已经加载了,再查看你的
php.ini
文件或者其他扩展的配置文件,是否已经添加了extension=redis.so
,如果有就删掉,然后写到extension=igbinary.so
之后。还有最重要的就是要注意一下
cli
的PHP
版本,系统是否安装了多个PHP
,如果有多个PHP
,请确保当前环境变量的PHP
和 你写的那个php.ini
文件对应上了。最后......
最后......
如果还是不行,那么就重装
PHP-CLI
吧。按照您的提示现在已经变成:
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
但是我检查 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
文件,读取配置。这不是明显已经有了吗
最简单的检查方式
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"