4

私が取り組んでいる Web アプリケーションは、同じ PHP 拡張機能の 2 つの異なるバージョンを処理できる必要があります。(具体的には、Mapserver 5.6 の MapScript と Mapserver 6.2 の MapScript。)

スクリプトは、php の実行が開始されるまで、2 つのバージョンのどちらをロードする必要があるかを認識しません。(ただし、各リクエストに必要な拡張子は 1 つだけです。)

私の当初の計画では、php 組み込みの dl 関数を使用する予定でしたが、セキュリティ上の問題により dl が無効になっていることがわかりました。( http://php.net/manual/en/function.dl.php )

実行中に拡張機能をロードする安全な方法はありますか? それとも、常に両方をロードし、別々の名前空間に配置して、別々にアクセスできるようにするのでしょうか?

4

1 に答える 1

2

良い質問なので、質問に+1を付けました。

しかし、あなたが探していることをする答えがあるとは想像できません。拡張機能がバージョン間で後方互換性を持たない場合、それは明らかに適切に設計されておらず、PHP がどのように責任を負うかを理解するのは困難です。

私が考えることができる最善の解決策は、拡張機能の 2 つの別々のバージョンを指定して、2 つの別々の php.ini または .htaccess ファイルを使用することです。Web サーバーから実行される PHP プログラムは、拡張機能が存在するディレクトリに応じて、異なるバージョンの拡張機能を取得します。

たとえばhttp://myserver/newmaps/program.php、拡張機能の新しいバージョンを実行し、拡張機能http://myserver/oldmaps/program.phpの古いバージョンを実行します。

次に、同じプログラムを 2 つのディレクトリに配置するだけです。必要な拡張バージョンを取得していないことが検出された場合は、http リダイレクトを発行して他のバージョンをロードすることができます。

于 2012-12-14T15:44:05.047 に答える