これはPHPでプログラムを作っている方向けの情報です。
セキュリティや性能の向上のため、レンタルサーバの構成は時の流れとともに変更されていきます。ですから、今のサーバで動いているプログラムはいずれ動かなくなる可能性があります。
この記事ではレンタルサーバのPHPがバージョンアップするときに、とどこおりなく移行(migration)するための基本的な方法をお話します。
どのバージョンに対応しているべきか
バージョンが古いPHPはバグ修正とセキュリティ更新がされなくなります。
ですから、まずはどのバージョンへ移行すべきかを決めます。
http://en.wikipedia.org/wiki/PHPによると、PHPの各バージョンがメンテナンスがされる期間は以下の通りです。
現時点ではPHPは5.4か5.5を使用すべきということになるでしょう。
下位互換性をチェックする
非常に重要なことは下位互換性です。
下位互換性があれば、新しいバージョンと古いバージョンで同じようにプログラムが動作します。
下位互換性がなければ、PHPのバージョンを上げるとプログラムが動かなくなります。
PHPではバージョンアップごとに、一部の機能に下位互換性のない変更が加えられます。これを全てチェックし、新しいバージョンで動作するようにプログラムを書き換えます。
下位互換性のない変更は以下でチェックできます。
- PHP 4 から PHP 5.0.x への移行で下位互換性のない変更点
- PHP 5.0.x から PHP 5.1.x への移行で下位互換性のない変更点はない
- PHP 5.1.x から PHP 5.2.x への移行で下位互換性のない変更点
- PHP 5.2.x から PHP 5.3.x への移行で下位互換性のない変更点
- PHP 5.3.x から PHP 5.4.x への移行で下位互換性のない変更点
- PHP 5.4.x から PHP 5.5.x への移行で下位互換性のない変更点
- PHP 5.5.x から PHP 5.6.x への移行で下位互換性のない変更点
例えば、PHP 5.2.xからPHP 5.3.x への移行では以下のような、下位互換性のない変更点があります。
- call_user_func() 関数 とその仲間は、呼び出し先が親クラスであっても $thisの値を伝播させるようになりました。
- 新しい mysqlnd ライブラリは、MySQL 4.1 用の41バイトの新しいパスワードフォーマットを使用します。古い16バイトのパスワードを使うと、mysql_connect()系の関数は次のようなエラーメッセージを生成します。“mysqlnd cannot connect to MySQL 4.1+ using old authentication”
前者に対しては、call_user_func_array()が動かないのようにプログラムを修正します。
後者に対しては、レンタルサーバのコントロールパネルから (同じ文字列だけれど新たなフォーマットで) パスワードを保存しなおすなどすれば良いでしょう。
PHP 5.6.x では json_decode() がより厳格になるので、WebアプリやAJAXを使っている人は今から気をつけた方が良いでしょう。5.6.x からは true、false および null について、すべて小文字のものしか受け付けなくなります。
エラー報告を非表示にする
先に説明しましたように、下位互換性のない変更点に対応すればPHPをバージョンアップしてもプログラムはちゃんと動きます。しかし理想的いうには不十分です。下位互換性の他に留意する点として推奨されなくなる機能があります。
推奨されなくなる機能とは、これまでと同様に使えるものの、プログラムを正確に安全に動作させるために、あるいは将来のバージョンアップを考慮すると使用すべきではない機能です。
理想的には微細なエラー報告までゼロにすべきですが、
推奨されなくなる機能などにも細かく配慮していかないと
エラー報告が表示されることも考えられます。
とりあえず、
バグ修正とセキュリティ更新がなされるバージョンになれば、
それ以外は今までと同程度に動けば良いということであれば、
.htaccessに以下のように記載するか
php_value error_reporting 0
phpプログラムに以下のように記載して
error_reporting(0);
全てのエラー報告をオフにすればお茶を濁せます。
PHPのバージョンを指定する
いくつかのサーバではディレクトリごとにPHPのバージョンを指定できます。
例えば、hetemlでは PHP 5.3.x と PHP 5.4.x を選択的に使えます。
具体的には .htaccess に以下のように記載することで、PHPのバージョンを指定できます。
AddHandler php5.4-script .php
※hetemlでの書き方なので、他のサーバでは機能しません。
同じレンタルサーバ内で複数のバージョンのPHPが共存している場合、初期設定でどのバージョンのPHPが動くのかはサーバ屋さん次第です。先立ってアナウンスされるはずですが、サーバの初期設定はしばしば変更されます。
下位互換性のチェックやバージョンの移行は自分の都合で行えた方が良いですから、PHPのバージョンは明示的に指定しておくと良いです。初期設定の変更でいきなり動作不良になるという事態も避けられますし。
お問い合わせについて
業務として技術コンサルティングやシステム設計・開発を行っております。
- 下位互換性のない変更点の内容がよくわからないので説明して欲しい。
- 新バージョンへの移行を助けて欲しい。
- 新バージョンへの移行を丸投げしたい。
など、気になることがありましたらご相談下さい。
ご相談のみで完結する場合、コンサルティング費用の目安は
内容によりますが1時間で5千円〜1万円ていどです。
コンサルティングや開発を検討されるその前に、
まずはお気軽にコメントやメールでご連絡下さい。
※ご契約前のコメントやメールでのやりとりは無料です。