6

再コンパイルせずにPHPでスレッドセーフを有効にする方法、またはYUMを使用してこれを行う方法はありますか?

pthreads をインストールしようとしていますが、PHP が でコンパイルされている必要があります--enable-maintainer-zts。ただし、yum を使用して PHP スタックを管理したいので、再コンパイルする必要はありません。現在、REMI リポジトリを使用しています。パッケージ php-zts があることに気付きましたが、PHP バージョン 4.4 で使用できるものはなく、php-zts のソース RPM が見つかりません。

yum を使用して PHP でスレッド セーフを有効にする方法はありますか?

#pecl install channel://pecl.php.net/pthreads-0.0.42

downloading pthreads-0.0.42.tgz ...
Starting to download pthreads-0.0.42.tgz (53,755 bytes)
.............done: 53,755 bytes
33 source files, building
running: phpize
Configuring for:
PHP Api Version:         20100412
Zend Module Api No:      20100525
Zend Extension Api No:   220100525
building in /var/tmp/pear-build-rootkThpG6/pthreads-0.0.42
running: /var/tmp/pthreads/configure

...

checking whether to enable Threading API... yes, shared
checking checking for ZTS... configure: error: pthreads requires ZTS, please re-compile PHP with ZTS enabled
ERROR: `/var/tmp/pthreads/configure' failed

上記のように、PHP で ZTS が有効になっていないため、失敗します。

4

2 に答える 2

2

ZTS の可用性はコンパイル時に決定されるため、動的に有効または無効にすることはできません。

ディストリビューションによっては、yum または別のパッケージ マネージャーを介して pThreads をインストールできる可能性がありますが、「可能」とは必ずしも、そのケースで使用可能なオプションであることを意味しないことに注意してください。それは、ZTS が有効になっている別の PHP ビルドに依存して、ソフトウェア リポジトリにそのようなパッケージが利用可能かどうかによって異なります。私はこれが事実であることを非常に疑っています。

于 2013-03-21T23:25:07.023 に答える
1

残念ながら、CLI のパッケージ メンテナーは、ほとんどの UNIX パッケージでスレッド セーフを有効にしていません。worker mpm apache で有効になることもありますが、常に完全なビルド環境が含まれているとは限りません (pecl が機能しないなど)。

つまり、実行時に ZTS を有効にする方法はありません。これはビルド時のオプションであり、ソースのコンパイル後にビルドを変更することはできません。

ただし、コピーを自分でインストールするのはそれほど難しくありません。

どの道をたどるかは、ディストリビューションでの経験と使用目的によって大きく異なります。

システムのインストールをスレッド セーフ バージョンで上書きする必要がある場合は、http://pthreads.org/buildingという情報があります。

分離されたインストールを構築したい場合は、pthreads.org の構築ページでいくつかの情報を見つけることができます。さらに、私は RPM を試しています。http: //github.com/krakjoe/spexには、ロールする rpmbuild ファイルが含まれています。 /opt/php-pthreads へのマスターおよびマスター pthreads の完全なビルド環境のコピー、付属のすべての機能が含まれています。rpmbuild バージョンでは apache はサポートされていません。これは、より複雑で巨大になるためです。fpm (もサポートされています)。

あなたは私が実際に rpmbuild を使用するようにアドバイスできると私が出会った最初の人です。なぜなら、あなたは他の VM の RPM を保持することができ、これを 1 回だけ実行する必要があるからです (とにかく次の更新まで)、不利な点これは、現在ベータ版である PHP の最先端のコードを使用していることです...

うまくいけば、それでうまくいくでしょう:)

于 2013-03-22T07:50:43.060 に答える