私の使っているレンタルサーバー(さくらインターネット)が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」になっています。
キャラセットの指定は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];
これは別で代用できなかったので、プログラムを一から作り変えることになりました。
まとめ
私の作っていたプログラムは小規模だったので、簡単の関数の置き換えなどで対応できました。
バージョンアップに伴う修正は大変でもありますが、致し方ないですね。