web-dev-qa-db-ja.com

PHP-拡張機能-no-debug-non-zts-xxxxxxxx

PHP拡張機能(memcachedとxdebug)をコンパイルしていますが、make installを実行すると、/ usr/local/php/lib/php/extensions/no-debug-non-zts-20090626にインストールされ続けます。だからいくつかの質問:

  1. No-debug-non-zts-20090626はどういう意味ですか、なぜそれがデフォルトなのですか?

  2. Php.iniファイルを編集し、extension_dirディレクティブを前述のディレクトリに設定することは良い習慣ですか?または、PREFIX =/usr/local/php/extensionsを使用して各モジュールをコンパイルする必要がありますか?したがって、私がインストールを行うと、それらはカスタム拡張ディレクトリに置かれ、次に、extension =/usr/local/php/extensions/memcached.so行を.iniファイルに追加できます。

  3. 新しいモジュールをコンパイルするときに、質問#1のディレクトリとは別のディレクトリに移動するリスクはありますか?

5
Mike Purcell

"no-debug-non-zts-20090626"は、デバッグフラグなしで、ZTSなしで構築されていることを意味します。これは、PHPが内部スレッドの安全性を示すために使用します。日付スタンプは、内部APIのバージョンを特定します。PHP 5.3。

これらを自分でコンパイルしてこれらの質問に回答が必要になるのではなく、おそらく OSディストリビューションまたは信頼できるサードパーティから提供されているこれらのモジュールのプリコンパイルされたバージョンを本当に探したいと思います。 Memcachedとxdebugは驚くほど一般的な拡張機能であり、すでに簡単に入手できる可能性があります。

それが失敗した場合、あなたはおそらくpeclツールを使用してこれらをダウンロード、コンパイル、およびインストールする必要があります。これらのツールは正当な理由で存在します。

3
Charles

モジュールの場所をカスタム構成するのではなく、モジュールuri全体を使用して拡張機能をそれぞれロードする拡張機能.iniファイルを作成しました。

; memcached.ini
extension=/path/to/php/lib/php/extensions/no-debug-non-zts-20090626/memcached.so

このように、私が行うときmake install、シンボリックリンクなどを行う必要はありません。

補足として、カスタム.iniファイル内で完全なモジュールuriを使用しない場合、PHPはモジュールを見つけることができません。これは、php.iniに以下を追加すると、それはうまくいきます:

; php.ini
extension=memcached.so

とにかく、うまくいきました。

2
Mike Purcell

ライブラリが見つかったかどうかを確認します。

ldd /usr/lib/php/extensions/no-debug-non-zts-xxxxxxxx/memcached.so

別館:

yum -y install gcc make automake autoconf gcc-c++ flex bison
yum remove libmemcached
/usr/bin/pecl uninstall memcached
wget https://launchpad.net/libmemcached/1.0/1.0.18/+download/libmemcached-1.0.18.tar.gz
tar -xvzf libmemcached-1.0.18.tar.gz
cd libmemcached-1.0.18
./configure
make && make install
/usr/bin/pecl install memcached-2.2.0
echo "extension=memcached.so" >/etc/php.d/memcached.ini
service httpd restart
/usr/bin/php -i | grep memcached
echo "<?php phpinfo(); ?>" > /var/www/html/phpinfo.php

ログを確認します。

tail -f /var/log/httpd/error_log
0
kalculator