我正在尝试通过 pecl 安装 php-redis。
运行这个:
php -i | grep API
给出了这个:
PHP API => 20220829
然后我运行
pecl install redis
并收到消息:
...
running: phpize
Configuring for:
PHP Api Version: 20220829
Zend Module Api No: 20220829
Zend Extension Api No: 420220829
...
Build process completed successfully
Installing '/usr/lib/php/20230831/redis.so'
install ok: channel://pecl.php.net/redis-6.0.2
Extension redis enabled in php.ini
如您所见,api 之间存在不匹配。
当我使用
php -i | grep redis
检查 php 时,我收到此错误消息:
PHP Warning: PHP Startup: redis: Unable to initialize module
Module compiled with module API=20230831
PHP compiled with module API=20220829
These options need to match
in Unknown on line 0
我使用的是 php8.2,所以 api 20220829 是正确的。
我的问题是,如何为 api 20220829 安装 redis 以匹配我的 php 版本。
您安装了多个版本的 PHP。
20230831
适用于 PHP 8.3。
% php -v
PHP 8.3.10 (cli) (built: Aug 2 2024 15:31:39) (NTS)
Copyright (c) The PHP Group
% php -i | grep API
PHP API => 20230831
您可能会
php
指向一个版本,而 php-config
则指向另一个版本。您可以通过运行 php-config
来验证这一点,以确保它与 php
输出匹配:
% php-config
Options:
--extension-dir [/usr/lib/php/20230831]
--phpapi [20230831]
--version [8.3.10]
要纠正,您必须运行所有 php 实用程序的替代方案,而不仅仅是 php 本身。我在我的
.bashrc
: 中使用一些别名来简化它
alias php74='sudo -- sh -c "for P in php php-config phpize phar phar.phar; do update-alternatives --set \$P /usr/bin/\${P}7.4; done"'
alias php80='sudo -- sh -c "for P in php php-config phpize phar phar.phar; do update-alternatives --set \$P /usr/bin/\${P}8.0; done"'
alias php81='sudo -- sh -c "for P in php php-config phpize phar phar.phar; do update-alternatives --set \$P /usr/bin/\${P}8.1; done"'
alias php82='sudo -- sh -c "for P in php php-config phpize phar phar.phar; do update-alternatives --set \$P /usr/bin/\${P}8.2; done"'
alias php83='sudo -- sh -c "for P in php php-config phpize phar phar.phar; do update-alternatives --set \$P /usr/bin/\${P}8.3; done"'
alias php84='sudo -- sh -c "for P in php php-config phpize phar phar.phar; do update-alternatives --set \$P /usr/bin/\${P}8.4; done"'
然后我只需输入
php82
将所有内容切换到 v8.2 等