2011-02-04 6 views
14

PHP(PHP 4.1から)まで50以上のアプリケーション(小/大)を移動する必要があります。そのような仕事の経験がある人もいますか?あなたの経験PHP 4をPHP 5に移動

  • 時間は、それがPHP 5.2に最初に移動しても意味がない
  • ツール
  • 環境のためのベストセットアップ(サーバー/テスト?)

が必要? PHP 5で動かない "PHP 4機能"を使ってアプリケーションを自動的に検出する方法はありますか?

私はこのようなプロジェクトをどのように処理するのか分かりません。ありがとう!

+3

のErm ....幸運。 – sevenseacat

答えて

6
  1. クラスの構文の一部はPHP4とPHP5の間で変更された - PHP5に、コンストラクタが__construct()命名され、一方、例えば、PHP4に、コンストラクタメソッドは、クラスと同じ命名しました。

    あなたのコードはまだ動作しますが、あなたはされません、多くの機能があるので、あなたがそれにもかかわらず、十分に新しいスタイルにそれらを変更することをお勧めだろうと思われるので、PHP5はまだ、PHP4スタイルのクラス定義にも対応することができますそうでなければ使用することができる。加えて、もちろん、古い構文は最終的に削除されます。あなたのPHP4クラスは将来的に壊れるので、緊急になるまで待つのではなく、今すぐ変更する方がよいでしょう。

  2. グローバル。あなたは既に古いコードの多くは、まだ標準INGのPHP3た古いスタイルの自動グローバルを使用することができる、PHP4で$_REQUEST$_POST$_GET$_COOKIESを使用している必要があります。これは大規模なセキュリティ上のリスクです。したがって、まだregister_globalsを使用している場合は、自動グローバルを使用したすべての場所ではなく、少なくとも$_REQUESTを使用するようにコードで作業を開始する必要があります。これは非常に難しい作業です。大規模なアプリケーションをトラップして、どの変数をグローバルにするかを決めるのは難しいかもしれません。一方の方法または他の方法を示すコードがない場合。これをやらなければならなかった人からそれを取ってください、それは本当の悪夢です。しかし、これはPHP5に移行するための具体的なものではありません - 私が言ったように、PHP4に固執しても、本当にこの問題に対処する必要があります。 PHP5は何も変更しませんが、register_globalsフラグがオフにデフォルト設定されています。これにより、実際にこの作業を行うための刺激が少しずつ与えられます。

  3. ereg_正規表現関数を使用すると、これらは非推奨になりました。等価のpreg_関数で置き換える必要があります。これは大きな仕事ではなく、関数がまだ利用可能であるため、関数が推奨されなくなったという警告を無視する準備ができている限り、待機することができます。しかし、やはりクラスの構文と同様に、今ではクラスの構文を変更することを検討するのが賢明かもしれません。

  4. 変更されたもう1つの機能は、古い構文が非難されているところです。PHP4では、我々は、参照によって変数を渡す関数呼び出しで&文字を使用することを奨励されました。 PHP5では、それを行うための正しい方法ではなく、あなたがそれを呼び出すどこよりも関数宣言で&文字を置くことです。繰り返しますが、古い構文はまだ動作しますが、PHPを使用して警告をスローすることができます。

+0

それは__construct、ない__constructorです。また、非常に古いスーパーグローバル($ HTTP_POST_VARSなど)は、PHP 4($ _POSTなど)には非難されていましたが、PHP 5ではそれ以上存在しないとも言えます。 –

+0

@ Daniel15 - oops on '__construct()';それを見つけてくれてありがとう、私は答えを編集しました。古いsuperglobals - 彼らはまだ存在します。非難されましたが、まだそこにはまだあります。しかし、彼らはスーパーグローバルではないので、 '$ _POST'などと同じくらい機能的ではありません。そして、それらは将来、ある時点で削除されるので、今それらを使うのは良い考えではありません。 – Spudley

3

error_reportingを有効にしてE_ALLに設定すると、非推奨のエラーなどが表示されるはずです。PHP5.2以降を対象とすることはありません。

アプリケーションを動作させたい場合や、新しいPHPの機能とパフォーマンスの向上を利用したい場合にかかっています。彼らが作業する必要がある場合は、エラーを修正し、E_DEPRECATEDE_NOTICEの警告を無視してください。

プロジェクトが適切な方法で書かれていれば、それをアップグレードするのは難しいことではありません。

それはひどく退屈で困難な仕事ではないと言っているわけではありません。それはあなたが期待するよりもはるかに長い時間がかかります。特に50アプリ!

11

最も重要なものはthe php.net section on migrating from PHP 4 to PHP 5です。 PHP 5が最初にリリースされて以来、より厳密な言語に移行しています(PHPはバージョン6ではデフォルトでstrictモードになります)。多くの警告メッセージが表示されます(エラーではない場合)。

PHP 5.0が出てきたので、作られた、より下位互換性のない変更が完全にするためにあなたも読んでください、ありました:私はそれだ実感が

Migrating from PHP 5.0.x to PHP 5.1.x

Migrating from PHP 5.1.x to PHP 5.2.x

Migrating from PHP 5.2.x to PHP 5.3.x

を読書がたくさんありますが、それは壊れる可能性があるすべての包括的なリストでなければなりません。

5

まず、register_globals、magic_quotes_gpcなどのphp.iniの設定を確認してください。アプリのロジックが壊れる可能性があります。

6

PHP_CompatInfoは、依存関係のチェックに役立ちます。 PHP_CodeSnifferは、時代遅れの構文を見つけることができます。

しかし、PHPのバージョンの違いはよく耳にするものです。フリンジケースに頼ったコードでは決して問題はありませんでした。当然のことながら、このコードはまだ長い超大域$ HTTP_POST_VARSに依存していなければ、いくつかの問題が予想されます。例えばmagic_quotesの依存性を交換する

役立つイディオムは次のとおりです。

$_POST = array_map("mysql_real_escape_string", $_POST); 

現実的にほとんどのアプリケーションが、より現代的なデータベースAPIを使用するようにを書き換えされることはありませんので。

3
は、 display_errorsをオフにし log_errorsをオンにし、 -1error_reportingを設定し、 E_STRICTE_DEPRECATED警告のために外を見る

This migration script(恥知らずプラグ)は廃止予定のもののいくつかのお手伝いをすることができます。それは5.2から5.3と言いますが、4からの移行にも役立ちます。そして、頻繁に遭遇したことを発見するために、それを拡張することができます(パッチ歓迎)。

PHPStorm IDEは、あなたのコード内の潜在的な問題のいくつかを指摘することができ、かなりまともなコードアナライザを持っています。それはあなたのアプリを実行し、それが何か面白いことがあるかどうかを参照してください。また、新しいキーワードを関数名などとして使用することから生じるエラーをすばやく見つけるのに役立ちます。

最後の質問については、IMHOを5.3にしてください。

+0

は理想的には、一つは 'display_errors'は、生産現場でとにかくオフになっているはずです。 – Spudley

+0

@Spudleyを理論的には、はい、しかし、あなたは「E_STRICTが私の本番サーバーを破った」私が聞いたことのように文句をどのように多くの驚かれることと思います。明日がないように人々はこのアドバイスを無視します。 – StasM

関連する問題