web-dev-qa-db-ja.com

以前のphpバージョンのpeclインストール

MacBookをMavericksにアップグレードして、開発環境を台無しにしました。私が今持っている問題は、私のpear/peclがバージョン5.4ではなく、以前の(5.3)バージョンのPHP)にインストールしようとすることです。

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でapcモジュールを有効にしますphp -vこれに変更します:

$ 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は/usr/local/Cellar/php53/5.3.26/lib/php/extensions/no-debug-non-zts-20090626に私のapc拡張機能をインストールし、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

したがって、それは解決策ではありません。

誰かが私を正しい方向に向けることができますか?ここで何が起こっているのか、本当に手がかりはありません。

22
Rene Terstegen

解決策は非常に簡単でした。私のpecl構成を変更する必要がありました。次の2つのコマンドでうまくいくことがわかりました。

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

peclは間違ったphpizeを使用しました。 phpizeには2つのバージョンがありました。私のphp.iniファイルでも同じことが言えます。

30
Rene Terstegen

私の場合、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

私はまだ得ることに気づきました

警告:php_bin/usr/bin/php5にサフィックス5があるようですが、構成変数php_suffixが一致しません

これは、config設定を使用して解決できます。

追加修正

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を実行することもできます。

35
Layke

他の回答は(まだ)複数の「共同インストール可能」に対応しているようには見えないPHPインストールされているすべての拡張機能をビルドしたいPHPバージョン。

私が自分自身を見つけたシナリオを示すために(私はOndrejSurýPHP Ubuntu 16.04 LTSのPPAを使用しています):

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はPHP 7.1のジョブを実行しますが、その他のジョブは実行しません。

他のアンサーは、アンインストール/再インストールは可能ですがphp*-dev、意図的に共同インストールされたPHPバージョンがシステムにインストールされていることを考えると、私はそうではありません。

1つの解決策は、システムに存在する各バージョンの拡張機能を構築することです。

このスニペットは、PHP 5.6を使用してビルドする方法を示していますが、7.0と7.1でも同じことを行っており、手順も同じです。

この例では、Gitリポジトリから拡張機能を複製する方法を示していますが、任意のソースディレクトリを使用できます。

#は、rootであるか、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
5
Ben Johnson

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
4
KorbenDallas

UbuntuでPHPバージョンを切り替える方法があります:

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

オプションで:

Sudo update-alternatives --set phar /usr/bin/phar5.6
Sudo update-alternatives --set phar.phar /usr/bin/phar.phar5.6
Sudo update-alternatives --set phpize /usr/bin/phpize5.6
Sudo update-alternatives --set php-config /usr/bin/php-config5.6

出典: https://superuser.com/a/1100911/371795

1
Tobi G.

最近同様の問題が発生しました。

(Debian、PHP 7.3インストールしたばかり、PHP 7.2)を使用していた)

誰かが最も高い投票数の回答を試みたが、まだ機能しない場合。デバッグする手順は次のとおりです。

  • 他のすべてのphpバージョン、特にdevパッケージ(私の場合はphp7.2-dev)を削除します。
  • 現在のバージョンの開発パッケージをインストールします(php7.3-dev)

そして、基本的にはそれだけです。

理由:

PECLには、php-devパッケージの一部であるphpizeが必要です。現在のバージョンのphpizeが見つからない場合、は以前のバージョンを探すため、古いPHP API番号になります。

0
Shiji.J

Ubuntu 16.04でppa:ondrej/php(およびおそらく他の代替手段)を使用する場合、php 5.6のpecl/php拡張機能をインストールするために、以下を実行します。

pecl config-set ext_dir /usr/lib/php/20131226
pecl config-set php_bin /usr/bin/php5.6
pecl config-set php_ini /etc/php/5.6/cli/php.ini
pear config-set ext_dir /usr/lib/php/20131226
pear config-set php_bin /usr/bin/php5.6
pear config-set php_ini /etc/php/5.6/cli/php.ini
update-alternatives --config php #select php 5.6
update-alternatives --config php-config #select php 5.6
update-alternatives --config phpize #select php 5.6

次に、通常どおりpeclを使用できます。

pecl install raphf-1.1.2

raphf-1.1.2.tgzのダウンロード... raphf-1.1.2.tgz(15,915バイト)のダウンロードを開始しています......完了:15,915バイト8つのソースファイル、ビルド

実行中:phpize

構成:

PHP APIバージョン:20131106

ZendモジュールAPI No:20131226

Zend Extension Api No:220131226

...

インストールOK:channel://pecl.php.net/raphf-1.1.2

Php.iniで有効化された拡張raphf

Php.iniで拡張機能が有効になっていない場合、peclがextension="xxx.so"はphp.iniの先頭にあるので、通常はファイルの末尾に手動で移動します。その後、次の拡張機能で問題ありません。

システム上にあるものに応じて、インストール後に変更をロールバックすることが必要になる場合があります。特に、デフォルトのphpバージョンを使用するには、update-alternativesを使用

0
Cédric