PHPをダウングレードするq(._.*)p

遠藤博樹(NHN JAPAN株式会社)

NHN Japanの遠藤が、KUSANAGIを使用した際にPHPのアップデートで動作不具合が生じたケースについて解説します。例としては、yum update後にPHPバージョンが7.3になり、WordPressでECサイトを運営しているお客様からの問い合わせが多いとのこと。遠藤は、問題の特定と解決策としてバージョンのダウングレードを提案。また、特定のモジュールのアップデートを避ける方法も示しています。これらの対処法により問題を解決しました。

12回目の投稿となります。
NHN JAPANの遠藤と申します。

よろしくお願いいたします。

今回はKUSANAGI 新着情報 に紹介されているyum update をしたらPHPのバージョンが7.3になってしまい、動作不具合が起きた、どうやって戻せるか?ってお問い合わせについて書きました。

HHVM or PHP7

少し前までKUSANAGI初期設定時のPHP実行形態デフォルトはHHVMでしたが現在はPHP7になっています。これは色んな理由がありますが、良く聞くのは次の通り。

これは色んな理由がありますが、良く聞くのは次の通り。

  • hhvmよりもphpのほうがプラグインが正しく動作する(互換性があると言われていたとしても、プラグイン開発元もhhvmで動作確認していない)
  • php5よりhhvm(php5ベース)が早いが、php7ではphp5の遅さを解消している
  • hhvmのリリース元のFacebokがhhvmのPHPサポート段階的な終了を発表

そのため弊社のKUSANAGIを載せているホスティングサービスでも古い環境のお客様がhhvmのまま使っていたらphp7への切り替えを提案しています。

でも、切り替えた時はちゃんとプラグインが動いていたのに暫くしたら動かなくなったとかも稀に良く聞きます。

そして暫くしたらと言っても何もしていないのに、ではなく、 yum update したら不具合が発生してしまったというお問い合わせを何度かいただきました。

お問い合わせがあった動作不具合の一例:
WordPressでECサイトを行う時に良く使われているWelcartをご利用のお客様。
この記事を書いている2019/4/10時点でもWelcartのシステム用件はPHP7.2までなので、PHP7.3については動くかもしれないし動いたとしてもサポートが受けれない可能性があります。

PHP7のダウングレード

KUSANAGIは新着情報でも確認出来る通り、モジュールのアップデートが定期的に行われ、PHPのマイナーアップデートも頻度に行われています。
各ミドルウェアは基本的には最新にしたほうがセキュリティなども保たれたり、メリットの方が大きいのですが、時にはアップデート前に戻したいってこともあるかもしれません。

yum update だけだと全てのパッケージが更新されるため、初回のお問い合わせではphpのバージョン差異が原因かの特定は出来ませんでしたが、yum.logからプラグインに影響しそうなモジュールの更新はphpと仮定出来たため、PHPのダウングレードを提案いたしました。

1.リポジトリにあるPHPのパッケージ名を確認する

# yum --showduplicates search kusanagi-php7
~~省略~~

kusanagi-php7-7.2.12-1.noarch : KUSANAGI PHP7
kusanagi-php7-7.2.13-1.noarch : KUSANAGI PHP7
kusanagi-php7-7.3.0-1.noarch : KUSANAGI PHP7
kusanagi-php7-7.3.0-2.noarch : KUSANAGI PHP7
kusanagi-php7-7.3.1-1.noarch : KUSANAGI PHP7
kusanagi-php7-7.3.2-1.noarch : KUSANAGI PHP7
kusanagi-php7-7.3.3-1.noarch : KUSANAGI PHP7
kusanagi-php7-7.3.4-1.noarch : KUSANAGI PHP7
kusanagi-php7-7.3.4-1.noarch : KUSANAGI PHP7

Name and summary matches only, use "search all" for everything.

2.PHP7.2.xに戻してみる(上の結果から、7.2系で一番新しいものを指定した例)

# yum downgrade kusanagi-php7-7.2.13-1.noarch -y
~省略~

インストール中 : kusanagi-php7-7.2.13-1.noarch 1/2
 整理中 : kusanagi-php7-7.3.4-1.noarch 2/2
 検証中 : kusanagi-php7-7.2.13-1.noarch 1/2
 検証中 : kusanagi-php7-7.3.4-1.noarch 2/2

削除しました:
 kusanagi-php7.noarch 0:7.3.4-1

インストール:
 kusanagi-php7.noarch 0:7.2.13-1

3.PHP7のバージョンを確認する

# php7 -v
PHP 7.2.13 (cli) (built: Dec 11 2018 17:00:05) ( NTS )
Copyright (c) 1997-2018 The PHP Group
Zend Engine v3.2.0, Copyright (c) 1998-2018 Zend Technologies
 with Zend OPcache v7.2.13, Copyright (c) 1999-2018, by Zend Technologies

指定したバージョンになっていました。その後、Welcartの動作確認をしていただき、無事正常動作に戻りました。


PHP7.2系を使い続けたい場合も、また違うモジュールをアップデートさせる時にyum update するとPHPもまた上がってしまうのでyum update –exclude=kusanagi-php7 とすることで、kusanagi-php7はアップデートから除外されます。

<< kusanagi ssl –hstsコマンドがエラーになったらφ(`・ω・´)φ

関連記事

Webサイト運用の課題解決事例100選 プレゼント

Webサイト運用の課題を弊社プロダクトで解決したお客様にインタビュー取材を行い、100の事例を108ページに及ぶ事例集としてまとめました。

・100事例のWebサイト運用の課題と解決手法、解決後の直接、間接的効果がわかる

・情報通信、 IT、金融、メディア、官公庁、学校などの業種ごとに事例を確認できる

・特集では1社の事例を3ページに渡り背景からシステム構成まで詳解