How to install php extension using pecl for specific php version, when several php versions installed in system?

后端 未结 4 1639
攒了一身酷
攒了一身酷 2021-01-30 08:37

I have installed both php5.6 and php7.0 from PPA on Ubuntu according to this manual

http://lornajane.net/posts/2016/php-7-0-and-5-6-on-ubuntu

But I didn\'t get h

4条回答
  •  青春惊慌失措
    2021-01-30 09:22

    I ran into this same issue while updating my Vagrant box with XHGui, as XHGui requires mongodb. I wanted to be able to support profiling on both PHP 5.6 and 7.0.

    I dug into the pecl source code, and found that there's a metadata_dir config option. That is a path to a directory where the current state of installed packages. Unfortunately, that isn't already namespaced per PHP version. If you try and set it with pecl config-set, you get an opaque 'failed' error. It turns out that setting isn't whitelisted as being configuable in the \PEAR_Config class:

    /**
     * Configuration values that can be set for a channel
     *
     * All other configuration values can only have a global value
     * @var array
     * @access private
     */
    var $_channelConfigInfo = array(
        'php_dir', 'ext_dir', 'doc_dir', 'bin_dir', 'data_dir', 'cfg_dir',
        'test_dir', 'www_dir', 'php_bin', 'php_prefix', 'php_suffix', 'username',
        'password', 'verbose', 'preferred_state', 'umask', 'preferred_mirror', 'php_ini'
        );
    

    In PECL's world, 'global' means it can only be set at install time, and not after.

    There's an issue in the PPA tracker over at github: https://github.com/oerdnj/deb.sury.org/issues/407

    The final suggestion there is to build the extension manually for alternate PHP versions. I ended up using pecl for PHP 7 extensions, and manual builds for 5.6. Make sure you run update-alternatives for php-config and phpize, and not just php before building:

    update-alternatives --set php /usr/bin/php5.6
    update-alternatives --set php-config /usr/bin/php-config5.6
    update-alternatives --set phpize /usr/bin/phpize5.6
    

    Then, extract the extension and build it. These steps from the above issue worked for me with the mongodb extension:

    phpize5.6 && ./configure --with-php-config=php-config5.6 && make && sudo make install

提交回复
热议问题