PHP5からPHP7に移行

PHP5からPHP7への移行 PHP

私の使っているレンタルサーバー(さくらインターネット)がPHP7に対応するようになり、それまで使っていたPHP5はサポート終了となりました。

ほとんどのレンタルサーバーもPHPのバージョンは7になっています(2019年現在は7.3)。

管理画面上でPHPのバージョンアップは選択ができますが、ワードプレスを設置しているうので、PHP7を使うことで処理速度が向上します。

PHP7は仕様が一部変更があり、PHP5で動作していたプログラムが動作しないケースがあります。現に、私が10年以上前にPHP5で作った掲示板とメールフォーム等が使えなくなっていました。

そこで、PHP5からPHP7に移行する際に対応した方法を書き留めておきます。

ファイルの文字コードはUTF-8のみ対応

PHP5では、文字コードが「EUC-JP」や「Shift-JIS」でも使えていましたが、PHP7では、どちらも文字化けを起こします。文字コードは「UTF-8」の一択です。

古いテキストエディタで作成したプログラムは、データベースと親和性のあった文字コード「EUC-JP」の設定になっているケースがあります。文字化けを起こすのであれば、文字コードを疑ってください。

対応方法は、テキストエディタで(私はCresent Eve使用)初期設定の文字コードがUTF-8で、ソースコードをこのまま貼り付けて保存します。プログラムのソースコードはそのままで、書式はUTF-8になります。他のSublime Textなどの新しいテキストエディタでは、初期設定の文字コードは「UTF8」になっています。

文字コードUTF8

キャラセットの指定はSift-JISでもOK

HTML内のcharaset(キャラクターセット)の指定は「Shift_JIS」のままでも文字化けにはなりません。HTML4の頃は、charasetの指定がShift_JISが一般的でしたので、下記のようにそのまま使うことができます。
例:<meta http-equiv=”content-type” content=”text/html; charset=Shift_JIS”>
※HTML5では文字コードはUTF-8が推奨されています

PHP7で使えない関数

PHP5では使えていた関数の一部が、PHP7では廃止となりました。

  • ereg
  • eregi
  • ereg_replace
  • eregi_replace
  • set_magic_quotes_runtime
  • split
  • spliti
  • sql_regcase
  • mysql関連

ereg関数について

正規表現の「ereg」関連の関数が使えなくなり、代わりに「preg_match」が使えます。

修正前:if(ereg (“/,/”, $mail))
修正後:if(preg_match(“/,/”, $mail))
【動作】$mailに「,」カンマが含まれていたときの処理

「ereg 」を「preg_match」に置き換えるとエラーはなくなりました。

mysql関数について

mysql関数は、全て後ろに「i」をつけます。iはimprovedで、改良されたという意味です。

例:mysql_connect() → mysqli_connect()

他のmysql関数も同様です(下記以外にもあります)

  • mysql_select_db() → mysqli_select_db()
  • mysql_query() → mysqli_query()
  • mysql_fetch_assoc() → mysqli_fetch_assoc()
  • mysql_error() → mysqli_error()

可変変数が使えない

変数の使い方で、可変変数($$)が動作しなくなりました。

例:$url = $$_GET[URL];

これは別で代用できなかったので、プログラムを一から作り変えることになりました。

まとめ

私の作っていたプログラムは小規模だったので、簡単の関数の置き換えなどで対応できました。

バージョンアップに伴う修正は大変でもありますが、致し方ないですね。