運(yùn)行了
pecl install igbinary
pecl install redis
也根據(jù)提示在 php.ini 里加上了 redis.so
但是現(xiàn)在運(yùn)行任何帶有 php 開(kāi)頭的命令,都會(huì)出現(xiàn)如下提示。
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
求大神給與幫助!
這個(gè)是 so 文件的路徑
這個(gè)是 php.ini 指明 so 的路徑。
這個(gè)是 extension 加載
redis.so.so,那是系統(tǒng)自動(dòng)加的.so后綴了吧,你ini里把.so后綴去掉呢,而且明顯你看報(bào)錯(cuò)信息路徑也添加多了呀,把多余路徑刪除了.你至少要把ini配置的截圖和redis.so的實(shí)際路徑發(fā)出來(lái)吧
用docker吧,方便快捷
我用docker 著呢,用的是 laradock 。
我在 docker 里啟動(dòng) webman ,但是在瀏覽器里打不開(kāi),我只能在docker 外啟動(dòng) webman , 但是連接不到docker里的 redis ,郁悶??!所以只能在 macOS 自帶的PHP里裝 redis 組件。
symbol not found in flat namespace (_igbinary_serialize))
這是擴(kuò)展的加載順序問(wèn)題,redis.so
需要在 igbinary.so
之后加載,就像 event.so 需要寫到sockets.so 之后一樣,這里邊有一些依賴問(wèn)題。
另外請(qǐng)確保 igbinary.so
被正確加載到了,執(zhí)行 php --ri igbinary
查看。
如果已經(jīng)加載了,再查看你的 php.ini
文件或者其他擴(kuò)展的配置文件,是否已經(jīng)添加了 extension=redis.so
,如果有就刪掉,然后寫到 extension=igbinary.so
之后。
還有最重要的就是要注意一下 cli
的 PHP
版本,系統(tǒng)是否安裝了多個(gè) PHP
,如果有多個(gè) PHP
,請(qǐng)確保當(dāng)前環(huán)境變量的 PHP
和 你寫的那個(gè) php.ini
文件對(duì)應(yīng)上了。
最后......
最后......
如果還是不行,那么就重裝 PHP-CLI
吧。
按照您的提示現(xiàn)在已經(jīng)變成:
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 里,只包含過(guò)一次:
; 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
會(huì)先加載 /usr/local/etc/php/8.1/php.ini
這個(gè)配置文件,然后掃描 /usr/local/etc/php/8.1/conf.d
這個(gè)目錄下的 .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
這不是明顯已經(jīng)有了嗎
最簡(jiǎn)單的檢查方式
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"