0

これが事実であり、私は顧客のためにphp拡張機能を開発しようとしています。SWIGを使用してラッパーコードを生成し、メインコードはc++です。拡張機能を正常に作成したら、それを/ extにロードし、テストのためにWebサーバーを再起動します。拡張機能がAPI20090626でビルドされているというエラーが発生しましたが、PHPサーバー(私の場合はXAMPP)APIは20100525です。エラーを完全に理解しているので、phpソースでZend_modules.hヘッダーファイルを開きます。 API番号を20090626から20100525に変更してから、更新されたzend_modules.hヘッダーファイルを使用して拡張機能をビルドしましたが、問題はありません。

問題は、私の顧客は確かに異なるAPIを備えた異なるphpサーバーを使用していることです。私は、苦労せずに簡単にロードできるdll(私の拡張機能)を顧客に提供することを計画しました。しかし、ここで、メインコード(dll)が動的にロードされたVS2010ソリューションを提供する必要があります。つまり、各ユーザーは最初に自分のサーバーからPHP APIをチェックし、Zend_modules.hヘッダーファイルを変更し、ソリューションをビルドしてから、拡張機能を使用する必要があります。拡張機能をそのAPI番号から完全に独立させるソリューションが必要です。

私は本当にどんな考えにも感謝します。

4

1 に答える 1

3

エラーを完全に理解しているので、phpソースでZend_modules.hヘッダーファイルを開き、API番号を20090626から20100525に変更します

あなたがこれをしているという事実は、あなたが実際にエラーを理解していないことを私に教えてくれます。

モジュールは、PHPの異なるメジャーバージョン間で互換性がありません。ZendAPI番号は、PHPが異なるバージョン用に構築されたモジュールを誤ってロードしようとしないようにするために使用されます。PHPビルドツリーに加えた変更により、どのバージョンでも正しく機能しないモジュールがビルドされます。

PHPの複数のメジャーバージョンのモジュールをビルドする必要がある場合は、対応するバージョンのPHPを使用してビルドを実行する必要があります。組み合わせたり、複数のバージョンで機能する単一のモジュールを構築したりすることはできません。(互換性のないモジュールを受け入れるようにPHPビルドを変更するようにユーザーにアドバイスする必要もありません。それは恐ろしいことを引き起こすだけです。)

PHPのいくつかのバージョンのAPIバージョンを以下に示します。

  • PHP 5.2:20060613
  • PHP 5.3:20090626
  • PHP 5.4:20100525
  • PHP 5.5:20120211
于 2013-03-02T06:04:49.277 に答える