pecl устанавливает предыдущую версию php

Я обновил свой MacBook до Mavericks и разрушил среду разработки. Проблема, которую я сейчас имею в виду, заключается в том, что моя груша / pecl по-прежнему пытается установить для моей предыдущей версии (5.3) PHP вместо версии 5.4.

Версия PHP:

$ php -v PHP 5.4.17 (cli) (built: Aug 25 2013 02:03:38) Copyright (c) 1997-2013 The PHP Group Zend Engine v2.4.0, Copyright (c) 1998-2013 Zend Technologies with Xdebug v2.2.3, Copyright (c) 2002-2013, by Derick Rethans 

Груша

 $ pear version PEAR Version: 1.9.4 PHP Version: 5.4.17 Zend Engine Version: 2.4.0 Running on: Darwin MBP-retina.local 13.0.0 Darwin Kernel Version 13.0.0: Thu Sep 19 22:22:27 PDT2013; root:xnu-2422.1.72~6/RELEASE_X86_64 x86_64 

Если я устанавливаю apc с

 $ sudo pecl install apc downloading APC-3.1.13.tgz ... Starting to download APC-3.1.13.tgz (171,591 bytes) .....................................done: 171,591 bytes 55 source files, building running: phpize Configuring for: PHP Api Version: 20090626 Zend Module Api No: 20090626 Zend Extension Api No: 220090626 ... Build process completed successfully Installing '/usr/local/Cellar/php53/5.3.26/include/php/ext/apc/apc_serializer.h' Installing '/usr/local/Cellar/php53/5.3.26/lib/php/extensions/no-debug-non-zts-20090626/apc.so' install ok: channel://pecl.php.net/APC-3.1.13 Extension apc enabled in php.ini 

И включите модуль apc в моих php.ini php -v изменениях:

 $ php -v PHP Warning: PHP Startup: Unable to load dynamic library '/usr/lib/php/extensions/no-debug-non-zts-20100525/apc.so' - dlopen(/usr/lib/php/extensions/no-debug-non-zts-20100525/apc.so, 9): image not found in Unknown on line 0 PHP 5.4.17 (cli) (built: Aug 25 2013 02:03:38) Copyright (c) 1997-2013 The PHP Group Zend Engine v2.4.0, Copyright (c) 1998-2013 Zend Technologies with Xdebug v2.2.3, Copyright (c) 2002-2013, by Derick Rethans 

Поэтому pecl устанавливает расширение apc в /usr/local/Cellar/php53/5.3.26/lib/php/extensions/no-debug-non-zts-20090626 а php ожидает его в /usr/lib/php/extensions/no-debug-non-zts-20100525/ .

Простое создание символической ссылки дает следующую ошибку:

 $ php -v PHP Warning: PHP Startup: apc: Unable to initialize module Module compiled with module API=20090626 PHP compiled with module API=20100525 These options need to match in Unknown on line 0 PHP 5.4.17 (cli) (built: Aug 25 2013 02:03:38) Copyright (c) 1997-2013 The PHP Group Zend Engine v2.4.0, Copyright (c) 1998-2013 Zend Technologies with Xdebug v2.2.3, Copyright (c) 2002-2013, by Derick Rethans 

Так что это не решение.

Может ли кто-нибудь указать мне в правильном направлении? Я действительно не понимаю, что здесь происходит.

В моем случае я пытался установить Гирмана.

pecl install gearman установит его неправильно.

php -i покажет:

 PHP Extension => 20100525 

Однако pecl будет устанавливать, используя:

 PHP Api Version: 20090626 

После изменения настроек конфигурации:

Первое исправление

 sudo pecl config-set php_ini /etc/php.ini sudo pecl config-set php_bin /usr/bin/php5 

Я заметил, что все равно

ПРЕДУПРЕЖДЕНИЕ: php_bin / usr / bin / php5 имеет суффикс 5, но переменная config php_suffix не соответствует

Вы можете решить эту проблему, используя настройку конфигурации:

Дополнительное исправление

 sudo pear config-set php_suffix 5 

Почему это проблема?

Для меня я попал в эту проблему, потому что добавил пользовательский PPA и переустановил PHP. Это означало, что моя предыдущая установка php5-dev не синхронизировалась.

Если вы когда-нибудь попадете в ту же ситуацию, вы можете просто запустить.

 apt-get remove php5-dev pecl uninstall <extensionname> apt-get install php5-dev apt-get remove php5-pear apt-get install php5-pear pecl install <extensionname> 

Кроме того, вы можете загрузить источник и запустить phpize.

Решение было довольно простым. Мне пришлось внести изменения в мою конфигурацию pecl. Оказалось, что эти две команды сделали трюк:

 sudo pear config-set php_ini /etc/php.ini sudo pecl config-set bin_dir /usr/bin/ 

pecl использовал неправильный phpize. Были две версии phpize. То же самое относится к моему файлу php.ini.

Лучше переустановить расширения phpize, поскольку он будет использоваться PECL, а не делать хаки.

Сделайте следующий (пример php 5.5 => php 5.6):

 sudo apt-get remove php5-dev sudo apt-get install php5.6-dev 

(вы можете изменить 5.6 на нужную вам версию)

Затем:

 sudo pecl install extensionname 

Ни один из других ответов (пока), по-видимому, не касается множества «совместимых» версий PHP, хотя он хочет построить данное расширение для всех установленных версий PHP.

Чтобы проиллюстрировать сценарий, в котором я нахожусь (я использую PPP Ondrej Surý PHP для Ubuntu 16.04 LTS):

 root@localhost:~# ls -lah /usr/bin/*php* -rwxr-xr-x 1 root root 11K Apr 19 12:50 dh_php -rwxr-xr-x 1 root root 3.1K Apr 5 2016 dh_phpcomposer -rwxr-xr-x 1 root root 5.4K Apr 5 2016 dh_phppear lrwxrwxrwx 1 root root 21 Jul 24 00:44 php -> /etc/alternatives/php -rwxr-xr-x 1 root root 4.3M Jul 6 10:04 php5.6 -rwxr-xr-x 1 root root 4.3M Jul 6 10:04 php7.0 -rwxr-xr-x 1 root root 4.4M Aug 4 14:22 php7.1 lrwxrwxrwx 1 root root 28 Jul 24 00:44 php-config -> /etc/alternatives/php-config -rwxr-xr-x 1 root root 4.3K Jul 6 10:03 php-config5.6 -rwxr-xr-x 1 root root 4.1K Jul 6 10:03 php-config7.0 -rwxr-xr-x 1 root root 4.1K Aug 4 14:21 php-config7.1 lrwxrwxrwx 1 root root 24 Jul 24 00:44 phpize -> /etc/alternatives/phpize -rwxr-xr-x 1 root root 4.7K Jul 6 10:03 phpize5.6 -rwxr-xr-x 1 root root 4.6K Jul 6 10:03 phpize7.0 -rwxr-xr-x 1 root root 4.6K Aug 4 14:21 phpize7.1 

pecl install extension-name выполняет работу для PHP 7.1, но не других.

Другие участники указывают на то, что, хотя можно удалить / переустановить php*-dev , я бы предпочел, если бы умышленно, совместно установленные версии PHP в системе.

Одним из решений является создание расширения для каждой версии, присутствующей в системе.

Этот фрагмент демонстрирует создание с помощью PHP 5.6, но я сделал то же самое для 7.0 и 7.1, и все те же.

В этом примере показано клонирование расширения из репозитория Git, но можно использовать любой исходный каталог.

( # указывает, что вы должны быть root или использовать sudo )

 # apt-get install php-dev # cd ~ # git clone https://github.com/vendor/extension-name # cd ./extension-name # phpize5.6 # ./configure --with-php-config=/usr/bin/php-config5.6 # make clean # make # make install # ln -s /etc/php/5.6/mods-available/extension-name.ini /etc/php/5.6/fpm/conf.d/20-extension-name.ini # service php5.6-fpm reload