php - mac - install pecl
instala pecl para la version php anterior (5)
En mi caso, estaba intentando instalar Gearman.
pecl install gearman lo instalaría incorrectamente.
php -i
mostraría:
PHP Extension => 20100525
Sin embargo, pecl se instalaría usando:
PHP Api Version: 20090626
Después de cambiar mis ajustes de configuración para usar:
Primer arreglo
sudo pecl config-set php_ini /etc/php.ini
sudo pecl config-set php_bin /usr/bin/php5
Me di cuenta de que todavía obtendría
ADVERTENCIA: php_bin / usr / bin / php5 parece tener un sufijo 5, pero la variable de configuración php_suffix no coincide
Puedes resolver esto usando la configuración de configuración:
Arreglo adicional
sudo pear config-set php_suffix 5
¿Por qué fue esto un problema?
Para mí, me metí en este problema porque agregué un PPA personalizado y reinstalé PHP. Esto significaba que mi instalación anterior de php5-dev no estaba sincronizada.
Si alguna vez te encuentras en la misma situación, es posible que solo quieras correr ...
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>
Alternativamente, puede descargar la fuente y ejecutar phpize.
Actualicé mi MacBook a Mavericks y arruiné mi entorno de desarrollo. El problema que tengo ahora es que mi perla / pecl todavía intenta instalar para mi versión anterior (5.3) de PHP en lugar de la versión 5.4.
Versión de 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
Pera
$ 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
Si instalo apc con
$ 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
Y habilitar el módulo apc en mi php.ini php -v cambia a esto:
$ 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
Así que pecl instala mi extensión apc en /usr/local/Cellar/php53/5.3.26/lib/php/extensions/no-debug-non-zts-20090626
y php la espera en /usr/lib/php/extensions/no-debug-non-zts-20100525/
.
Simplemente haciendo un enlace simbólico da el siguiente error:
$ 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
Así que eso no es una solución.
¿Alguien puede señalarme en la dirección correcta? Realmente no tengo ni idea de lo que está pasando aquí.
Es mejor reinstalar las extensiones de phpize, ya que PECL las usará y no hará hacks.
Haga lo siguiente (php 5.5 => php 5.6 ejemplo):
sudo apt-get remove php5-dev
sudo apt-get install php5.6-dev
(Puedes cambiar 5.6 a la versión que necesites)
Entonces:
sudo pecl install extensionname
Hay una manera de cambiar la versión de PHP en Ubuntu:
sudo update-alternatives --set php /usr/bin/php5.6
La solución era bastante simple. Tuve que hacer modificaciones a mi configuración pecl. Resultó que estos dos comandos hicieron el truco:
sudo pear config-set php_ini /etc/php.ini
sudo pecl config-set bin_dir /usr/bin/
pecl usó el phpize mal. Había dos versiones del phpize. Lo mismo cuenta para mi archivo php.ini.
Ninguna de las otras respuestas (hasta el momento) parece abordar el hecho de tener varias versiones de PHP "coinstalables" mientras se desea construir una extensión determinada para todas las versiones de PHP instaladas.
Para ilustrar el escenario en el que me encuentro (uso los PPA de Ondrej Surý para 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
hace el trabajo para PHP 7.1, pero no los otros.
Las otras respuestas indican que si bien es posible desinstalar / reinstalar php*-dev
, preferiría no hacerlo, dadas las versiones de PHP instaladas en el sistema.
Una solución es construir la extensión para cada versión presente en el sistema.
Este fragmento muestra cómo construir con PHP 5.6, pero he hecho lo mismo para 7.0 y 7.1 y los pasos son los mismos.
Este ejemplo demuestra la clonación de la extensión de un repositorio Git, pero uno puede usar cualquier directorio de origen.
( #
indica que debes ser root o usar 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