はじめに
プロジェクトを進めるにつれて、PHPのバージョンの更新は確実に必要はあると思っていたのですが、なぜバージョンアップが必要なのかを具体的に把握できていなかったので考えてみました。
目次
公式サポート期限とセキュリティの脆弱性
PHPバージョンとサポート期限一覧
バージョン | 初回リリース | 最新リリース | 最新リリース日 | アクティブサポート | セキュリティサポート |
---|---|---|---|---|---|
8.0 | 2020/11/26 | 8.0.9 | 2021/07/29 | 2022/11/26 | 2023/11/26 |
7.4 | 2019/11/28 | 7.4.22 | 2021/07/29 | 2021/11/28 | 2022/11/28 |
7.3 | 2018/12/06 | 7.3.29 | 2021/07/01 | 2021/12/06 | |
7.2 | 2017/11/30 | 7.2.34 | 2020/10/01 | ||
7.1 | 2016/12/01 | 7.1.33 | 2019/10/24 | ||
7.0 | 2015/12/03 | 7.0.33 | 2018/12/06 | ||
5.6 | 2014/08/28 | 5.6.40 | 2019/01/10 |
サポート期限とセキュリティ
サポート期限が終了したバージョンを使用していたとしても、急に動かなくなるということはないです。
しかし、サポートが終了すると、セキュリティサポートがなくなり、修正されていないセキュリティの脆弱性にさらされるようになります。
ちなみに2016年にはPHPのセキュリティ脆弱性はDoS、コード実行、オーバーフロー、メモリ破損、XSS、ディレクトリトラバーサル、バイパス、および情報の取得などにおいて100件以上も報告されておりました。1
脆弱性を知る・見つける
PHP に関わる多くの脆弱性については、CVE(Common Vulnerabilities and Exposures) と呼ばれる個々の脆弱性管理するために、固有の識別番号が採番されます。
このCVEを元に脆弱性情報を、 CVE Details や日本語ですと JVN (Japan Vulnerability Notes) で情報を得ることができます。
また、 [FriendsOfPHP/security-advisories] (https://github.com/FriendsOfPHP/security-advisories) というPHPプロジェクトおよびライブラリの脆弱性を監視するライブラリも存在するみたいです。
脆弱性の対策
自身のプロジェクトで使っている PHP ライブラリとそのバージョンを把握し脆弱性を監視しつつ、必要であればセキュリティ対応ができるバージョンに切り替えていく。
パフォーマンス向上
PHPバージョン別のベンチマーク
以下Laravel8.21.0環境でバージョン7.3, 7.4, 8.0が検証されたデータです。
テスト内容は1つのURLに同時接続ユーザー数15、リクエスト数10,000で、1秒あたりのリクエスト数が多ければ多いほど良い結果となるみたいです。
(実行環境については参考文献からご覧ください)
Laravel 8.21.0 PHP 7.3 のベンチマーク結果:574.67 req/sec
Laravel 8.21.0 PHP 7.4 のベンチマーク結果:602.15 req/sec
Laravel 8.21.0 PHP 8.0のベンチマーク結果:623.78 req/sec🏆
結果はこのようになっており、PHP 7.3よりもPHP 8.0の方が1秒あたり8.54%多いリクエストを実行しています。
その他パフォーマンス向上機能
PHP7.4で実装された Preloading、 PHP8.0の JIT などといったアプリケーションを高速化させる機能もバージョンアップで追加されることがある。
新文法に対する対応
言語がアップデートされることによって新しいコードの書き方が追加されることがあり、それによって更に利便性が向上したり、コードを軽量化することができます。
しかし、新文法を知っているのと知らないのではかなり差があり、大きく分けて以下の3つの問題があります。
- コードレビューができない
- ライブラリの処理を追うことができなくなる
- ネット上の新しい情報が理解できない
まとめ
古いバージョンのPHPでもアプリケーションが急に動かなくなるということはないですが、
- セキュリティサポートが終了してしまうと脆弱性の対策ができない。
- パフォーマンス改善の機会を失う。
- 新文法の記述を知ることができないです。