2013-10-24 54 views
18

我已经将我的MacBook升级到小牛,并破坏了我的开发环境。我现在遇到的问题是,我的pear/pecl仍然试图安装我以前的(5.3)PHP版本而不是5.4版本。以前的php版本pecl安装

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 

而且能够在我的php.ini PHP -v改变这个APC模块:

$ 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 

所以这不是一个解决方案。

任何人都可以指向正确的方向吗?我真的不知道这里发生了什么。

回答

20

该解决方案非常简单。我必须对我的pecl配置进行修改。原来,这两个命令的伎俩:

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

PECL使用了错误的phpize。有两个版本的phpize。同样重要的是我的php.ini文件。

+2

噢,我的上帝,谢谢你。我一直在解决这个问题12个小时,不知道pecl为什么不能为PHP 5.5创建。运行这两个命令修复它。你真的救了我的屁股。 – atxpunkrock

27

就我而言,我试图安装Gearman。

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 

我注意到,我仍然会得到

WARNING: php_bin /usr/bin/php5 appears to have a suffix 5, but config variable php_suffix does not match

您可以通过使用配置设置解决此问题:

其他修复

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。

+1

谢谢 - 删除并重新安装php5-dev为我做了诀窍。唷。 –

+0

这个答案帮助我解决了一点点不同的问题 –

+0

我没有得到Mac炒作。为什么你不能只下载一个文件并把它放在里面? –

3

更好地重新安装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 
+0

这实际上是解决这个问题的正确方法,而不是搞乱那些经常会导致更多问题的配置。 – Vincent

2

其他的无答案(至今)似乎解决了有多个“可共同安装”的PHP版本,同时希望为所有安装的PHP版本构建一个给定的扩展。

为了说明,我发现自己的场景(我用的OndrejSurýPHP的PPA为Ubuntu 16.04 LTS):

[email protected]:~# 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仓库克隆扩展,但可以使用任何源码目录。

#表明您必须是根或使用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