2016-11-04 35 views
9

Mam zainstalowany zarówno php5.6 i php7.0 z PPA na Ubuntu według tej instrukcjiJak zainstalować rozszerzenie php za pomocą pecl dla konkretnej wersji php, gdy kilka wersji php jest zainstalowanych w systemie?

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

Ale nie dostać jak zainstalować rozszerzenia używając pecl dla php5.6 lub php7.0 .

Na przykład mam już zainstalowaną wersję libevent lub amqp w php5.6.

Teraz po wpisaniu pecl install libevent i moja aktywna wersja php jest php7.0 (używając update-alternatives --set php /usr/bin/php7.0), pecl returns message that libevent` już zainstalowany.

Ale to był zainstalowany tylko dla php5.6 (kiedy ta wersja była aktywna) i teraz Chcę to zrobić dla php7.0.

które polecenia może mi pomóc?

UPD

mam fo und tego polecenia do przełącznika PECL do php7.0 i pakietowych je do wykonywalnych skryptów bash

#!/bin/bash 

sudo update-alternatives --set php /usr/bin/php7.0 

sudo pecl config-set php_ini /etc/php/7.0/cli/php.ini 
sudo pecl config-set ext_dir /usr/lib/php/20151012/ 
sudo pecl config-set bin_dir /usr/bin/ 
sudo pecl config-set php_bin /usr/bin/php7.0 
sudo pecl config-set php_suffix 7.0 

i php5.6

#!/bin/bash 

sudo update-alternatives --set php /usr/bin/php5.6 

sudo pecl config-set php_ini /etc/php/5.6/cli/php.ini 
sudo pecl config-set ext_dir /usr/lib/php/20131226/ 
sudo pecl config-set bin_dir /usr/bin/ 
sudo pecl config-set php_bin /usr/bin/php5.6 
sudo pecl config-set php_suffix 5.6 

Ale nie są one pomóc, pecl nadal daje mi list z już zainstalowane rozszerzenia do php5.6, nawet jeśli przełączyłem się na php7.

pecl list 
Installed packages, channel pecl.php.net: 
========================================= 
Package Version State 
amqp  1.7.1 stable 
libevent 0.1.0 beta 
stats 1.0.3 stable 

Powinien być pusty dla php7.0!

Jak rozwiązać problem?

UPD

Dla AMQP Właśnie zainstalowano pakiet php-AMQP bez użycia pecl.

apt-get install php-amqp 

I libevent nadal nie istnieje dla php7. Ale nie znalazłem sposobu na zmianę instalacji pecl pomiędzy wersją 5.6 a 7, więc pytanie jest nadal otwarte.

+0

dlaczego masz dwie wersje php? – Archish

+1

Potrzebuję obu do moich konkretnych potrzeb. Na przykład mam 2 projekty, jeden powinien działać z 5.6, drugi z 7. I nie mam czasu na migrację pierwszego do php7. –

+0

Czy znalazłeś jakieś rozwiązanie? – ChickenFeet

Odpowiedz

3

Wpadłem na ten sam problem podczas aktualizacji my Vagrant box with XHGui, ponieważ XHGui wymaga mongodb. Chciałem móc wspierać profilowanie zarówno w PHP 5,6, jak i 7.0.

Wkopałem się w kod źródłowy pecl i odkryłem, że istnieje opcja konfiguracji metadata_dir. To jest ścieżka do katalogu, w którym znajduje się aktualny stan zainstalowanych pakietów. Niestety nie jest to już nazwane na wersję PHP. Jeśli spróbujesz ustawić to przy pomocy pecl config-set, otrzymasz nieprzejrzysty błąd "błąd". Okazuje się, że ustawienie nie jest na białej liście jako configuable w klasie \PEAR_Config:

/** 
* 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' 
    ); 

W świecie pecl za „globalny” oznacza, że ​​może być ustawiony tylko w czasie instalacji, a nie po.

Jest to problem w trackera PPA nad na github: https://github.com/oerdnj/deb.sury.org/issues/407

Ostateczna propozycja jest ręcznie zbudować rozszerzenie dla alternatywnych wersjach PHP. W końcu użyłem pecl dla rozszerzeń PHP 7 i ręcznych kompilacji dla 5.6. Upewnij się uruchomić update-alternatives do php-config i phpize, a nie tylko php przed budynkiem:

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 

Następnie rozpakować rozszerzenie i zbudować. Te kroki z powyższej kwestii pracował dla mnie z rozszerzeniem MongoDB:

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

2

Kiedy pecl wyrzuca błąd jest już zainstalowany i jest taka sama jak w wydanej wersji

Switch to wymagane php, php-config wersje phpize przed instalacją z PECL

Wystarczy go uruchomić instalację z flagą siły

sudo pecl install -f <package-name> 
+1

To jest najlepsza odpowiedź w mojej opinii. Wygląda jednak na to, że usuwa poprzedni obiekt rozszerzenia, co jest denerwujące. – msbit

1

Oto co pracował dla mnie najlepsza podczas próby skryptu to (w przypadku ktoś natknie to tak jak ja):

$ pecl -d php_suffix=5.6 install <package> 
$ pecl uninstall -r <package> 

$ pecl -d php_suffix=7.0 install <package> 
$ pecl uninstall -r <package> 

$ pecl -d php_suffix=7.1 install <package> 
$ pecl uninstall -r <package> 

-d php_suffix=<version> kawałek umożliwia ustawienie wartości konfiguracyjnych w czasie wykonywania vs wstępnie ustawiając je z pecl config-set . uninstall -r nieco nie faktycznie go odinstalować (od docs):

[email protected]:~$ pecl help uninstall 
pecl uninstall [options] [channel/]<package> ... 
Uninstalls one or more PEAR packages. More than one package may be 
specified at once. Prefix with channel name to uninstall from a 
channel not in your default channel (pecl.php.net) 

Options: 
    ... 
    -r, --register-only 
     do not remove files, only register the packages as not installed 
    ... 

Linia Uninstall jest konieczne inaczej instalacji będzie usunąć poprzednio zainstalowaną wersję, nawet jeśli to było dla innej wersji PHP (ex: Instalowanie rozszerzenie dla PHP 7.0 usunie wersję 5.6, jeśli pakiet był jeszcze zarejestrowany jako zainstalowany).