2016-10-06 6 views
2

私はウェブサイトのセキュリティを強化するためのツールを構築しています。 ツールがCMSを起動する前に読み込まれ、問題のあるコンテンツ(ソフトファイアウォールなど)をスキャンしますコードを使用した後のコンポーザーオートローダーのアンロード

問題は次のとおりです。 - ツールをビルドするにはComposer上でいくつかのライブラリを使用しました。ここまでは順調ですね。 CMSがComposer Autoloadを呼び出すと、コード内に同じlibsの異なるバージョンが存在することになり(問題とエラーが発生するため)、これは悪い考えかもしれません。

私のスクリプトがリクエストをスキャンし終えたら、作者の自動ロードをアンロードする方法はありますか?

は、任意の助けをありがとう:)

+1

なぜあなたはあなたのツールをCMSに統合しなかったのだろうが、それを別のツールとして開発したのだろうか? – Xatenev

+0

別個のベンダーディレクトリを使用して、パスの競合を取得せず、 '$ functions = spl_autoload_functions();を使用します。 foreach($関数としての$関数){ spl_autoload_unregister($関数); } ' – Xatenev

+0

@ Xatenev今後このツールを他のウェブサイトでも使用したいと考えています。したがって、CMSは非特定でなければなりません。 – OmegaTCU

答えて

0

次のようにはい、あなたはオートロード機能の登録を解除することができます

$functions = spl_autoload_functions(); 
foreach($functions as $function) { 
    spl_autoload_unregister($function); 
} 

出典:http://php.net/manual/en/function.spl-autoload-unregister.php#112225

をしかし、これは(あなたが望むものである)白紙の状態であなたを残しません。

  • グローバル変数の設定を解除する必要があります
  • 一部のライブラリで定数を定義している可能性があります。 (source
  • あなたのコードにロードするクラスは、リクエストの存続期間中はロードされたままで、私が知っている限り、アンロードする方法はありません(source

あなたの最善の策はあなたのコードを上記のアプリケーションに統合することです作曲者ファイルをマージ)、アプリケーションのメンテナンス中にバージョンを同期させておくことができます。

+0

大丈夫です - 私はこれに名前空間を使うことができますので、ウェブサイトからの他の呼び出しと競合しませんか? – OmegaTCU

+0

あなた自身のコードでは、はい。しかし、あなたが作曲家経由でインストールしたライブラリの中にFoo \ Barというクラスをロードしているとしましょう。 autoloadの登録を解除しますが、 'Foo \ Bar'クラスの定義はロードされたままです。後で実行するCMSが 'Foo \ Bar'を要求すると、あなたのコードによってロードされたものを受け取るでしょう。したがって、あなたの作曲家ファイルをマージして、libバージョンを同期させておくという提案(私の編集を参照)。はい、これは依存性の地獄になるかもしれませんが、あなたの作曲家のライブラリを安定版/タグにロックしておく限り、それは管理可能でなければなりません。 – MicE

0

ウェル作曲は、ベンダーのフォルダにautoload.phpを生成します。そして、すべての作曲家の呼び出しは、autoload.phpを上書きします。

あなたは自分のベンダーのために別のフォルダを使用することができます。

また、composer.jsonの「installer-paths」で使用するようにフォルダを変更することもできます。

+0

ありがとうございます。私はすでに別のベンダーのディレクトリを使用しています。しかし、私は、自動ロードは、CMSのベンダーのdirの代わりに私のdirに行くと思った。 – OmegaTCU

+0

大丈夫、ソフトファイアウォールをどうやって始めましょうか?私はある種のプロセス分離をお勧めします。 (PhpProcessのような) – Gladhon

0

良い質問。 私のコードの2か所で異なるバージョンのグズルを使用した場合、私は同様の問題に直面しました。 したがって、既に登録されているクラスを実行時に登録解除することはできません。 Firerwallの足音からランタイムcleanを実行することはできません。 したがって、使用する製品がどこにあっても互換性があり、矛盾しないことを確認することはできません。 悲しい、しかし真実。

+0

この1つのプロジェクトの私のソリューションは、作曲家を一緒にマージすることです。それ以外のものについては、私が自分のクラスを書くことが必要です。自分の解決策だけを使うと、作曲家に問題はないはずです。このofcは他の問題を伴います... – OmegaTCU

関連する問題