2013-10-24 102 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