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