2013-10-24 40 views
18

Ho aggiornato il mio MacBook a Mavericks e rovinato il mio ambiente di sviluppo. Il problema che ho adesso è che il mio Pear/Pecl tenta ancora di installare per la mia versione precedente (5.3) di PHP invece della versione 5.4.pecl installa per la precedente versione php

versione di 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 

Se installo 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 

e attivare il modulo di APC nei cambiamenti mio php.ini php -v per questo :

$ 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 

Quindi installare la mia estensione apc in /usr/local/Cellar/php53/5.3.26/lib/php/extensions/no-debug-non-zts-20090626 e php lo prevede in /usr/lib/php/extensions/no-debug-non-zts-20100525/.

semplicemente facendo un link simbolico dà il seguente errore:

$ 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 

modo che non è una soluzione.

Qualcuno può indicarmi la giusta direzione? Davvero non ho idea di cosa sta succedendo qui.

risposta

20

La soluzione era piuttosto semplice. Ho dovuto apportare modifiche al mio pecl config. Si è scoperto che questi due comandi ha fatto il trucco:

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

pecl utilizzato il phpize sbagliato. C'erano due versioni di phpize. Lo stesso vale per il mio file php.ini.

+2

Oh mio Dio, grazie. Ho combattuto questo problema per 12 ore e non sono riuscito a capire perché pecl non avrebbe costruito per PHP 5.5. L'esecuzione di questi due comandi l'ha risolto. Mi hai letteralmente salvato il culo. – atxpunkrock

27

Nel mio caso, stavo tentando di installare Gearman.

l'installatore pecl installava erroneamente.

php -i avrebbe mostrato:

PHP Extension => 20100525 

Eppure PECL sarebbe installazione utilizzando:

PHP Api Version:   20090626 

Dopo aver modificato le mie impostazioni di configurazione da utilizzare:

prima difficoltà

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

ho notato che avrei ancora ottenere

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

È possibile risolvere questo utilizzando l'impostazione di configurazione:

Ulteriori Fix

sudo pear config-set php_suffix 5 

Perché era questo un problema ?

Per me, ho avuto questo problema perché ho aggiunto un PPA personalizzato e reinstallato PHP. Ciò significava che la mia precedente installazione di php5-dev era fuori sincrono.

È se mai nella stessa situazione, si potrebbe semplicemente voler eseguire ..

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> 

In alternativa, è possibile scaricare il codice sorgente ed eseguire phpize.

+1

Grazie - la rimozione e la reinstallazione di php5-dev hanno fatto il trucco per me. Uff. –

+0

questa risposta mi ha aiutato molto a risolvere un po 'diverso problema –

+0

Non capisco l'hype Mac. Perché non puoi semplicemente scaricare un file e aprirlo dentro? –

3

Meglio reinstallare le estensioni phpize in quanto verrà utilizzato da PECL e non creare hack.

Do successivo (php 5.5 => PHP 5.6 esempio):

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

(è possibile modificare 5.6 alla versione è necessario)

Poi:

sudo pecl install extensionname 
+0

Questo è in realtà il modo corretto per risolvere questo problema invece di fare confusione nella configurazione che, molto spesso, porta a più problemi. – Vincent

2

Nessuno degli altri le risposte (per ora) sembrano risolvere più versioni PHP "co-installabili" mentre si vuole costruire una determinata estensione per tutte le versioni di PHP installate.

Per illustrare lo scenario in cui mi trovo (sto usando l'Ondrej Surý PHP PPA per 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 fa il lavoro per PHP 7.1, ma non gli altri.

Gli altri anwsers indicano che mentre è possibile disinstallare/reinstallare php*-dev, preferirei di no, dato l'intenzionale, co-installato versioni PHP sul sistema.

Una soluzione è creare l'estensione per ogni versione presente sul sistema.

Questo snippet dimostra la creazione con PHP 5.6, ma ho fatto lo stesso per 7.0 e 7.1 e i passaggi sono gli stessi.

Questo esempio dimostra la clonazione dell'estensione da un repository Git, ma è possibile utilizzare qualsiasi directory di origine.

(# indica che è necessario essere root o utilizzare 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 
Problemi correlati