代码之家  ›  专栏  ›  技术社区  ›  Leon Segal

php-resi模块和php编译不匹配

  •  0
  • Leon Segal  · 技术社区  · 10 月前

    我正在尝试通过pecl安装php-resi。

    运行此程序:

    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时 php -i | grep redis ,我收到以下错误消息:

    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是正确的。

    我的问题是,如何安装redis for api 20220829以匹配我的php版本。

    1 回复  |  直到 10 月前
        1
  •  2
  •   Alex Howansky    10 月前

    你的系统不只是拉 20230831 由于没有安装,因此您似乎安装了多个版本的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配置 ,以确保它与什么相匹配 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等。

    推荐文章