1

私はかなり大きなphpサイトを持っています。これはphp4とregister_globalsを有効にするために書かれました。古いカスタムCMSです。今、私はregister_globalsなしでphp5ホスティングでそれを実行したいと思います。いくつかのスクリプトを使用して、パラメータ解析を$idから$_GET ["id"]に自動的に変更することは可能ですか?

wget -rこのサイトからパラメータ名を取得できます。

数十のphpスクリプトがあり、この変更を手動で行うのは簡単ではありません。

PS:更新:GET変数のみを変換したい。追加の行は$var_name = $_GET["var_name"]各パラメーター用です。<? ?>この行は、スクリプトの非常に高い位置に挿入する必要があります。たとえば、一番上に新しいセクションを追加します。

4

3 に答える 3

4

このようなツールを実行すると、コードにエラーが発生するリスクが高くなります。

スーパーグローバルでextract()を実行して、register_globalsを強制すると、アプリケーションが正しく機能するようにすることをお勧めします。

http://php.net/manual/pl/function.extract.php

次に、すべてが正常になったら、入力パラメーターのOOラッパーを作成し、それを素敵なDIコンテナーにパックして、スクリプト全体を新しいスタイルに手動で移行し始めます。

于 2011-06-07T04:09:08.040 に答える
1

変換に役立つツールはわかりませんが、いくつかのオプションがあります。

  1. register_globalsが実行したのと同じことを実行して、レジスタグローバルをシミュレートします。スクリプトの開始時に、GETおよびPOSTのすべての変数をグローバル変数名前空間に(つまり、経由でextract)配置します。これは最速で最も簡単な解決策ですが、register_globalsで知られているセキュリティの問題が発生し、アプリケーションのパフォーマンスには役立ちません。
  2. 使用される変数を決定し、initスクリプトを介してのみ$GLOBALSにのみロードします。まだいいじゃない
  3. 使用される変数を決定し、GLOBALSの使用法をREQUESTに置き換えます
  4. 手動でウォークスルーします。このようにして、すべてが正しく、その後の問題が最も少なくなることを確認できます。

あなたの説明から、cmsはとにかく更新されていないように見えるので、ソリューション1または2が最適かもしれません(これは残念です)。

于 2011-06-07T04:12:48.263 に答える
0

実際の検索/交換には時間がかかる場合がありますが、これを手動で行うと、バグや奇妙な動作が少なくなる可能性があります。

アプリケーションの元の作成者でない場合は、この手動による検索/置換は、自動化された方法よりもコードベースに精通する機会でもあります。

自動:高速、ほぼ間違いなくいくつかの恐ろしいバグが発生します

手動:遅い(可能性が高い)、ほぼ間違いなく、理解が深まり、バグが少なくなります。また、導入されたバグは、理解が深まるため、修正が容易になります。

于 2011-06-07T04:08:52.387 に答える