CentOS6、7のPHPを5.3から5.6、7.0、7.1にバージョンアップする手順の解説
2019/02/24
CentOS6、7のPHPを5.3から5.6、7.0、7.1にバージョンアップする手順
WordPressを運用しているPHPのバージョンが5.3.3だった
 
WordPressを運用しているサーバの PHPのバージョンが 5.3.3でした。
そのため、WordPressのバージョンアップが行えず、プラグインを使用するにも制限がありました。
 
そのため、ようやく重い腰を上げて PHPのバージョンをアップする作業を行いました。
その作業手順をまとめつつ、解説をしていこうと思います。
 
 
ちなみに、この案件もそうでしたが、諸般の事情で PHPのバージョンアップが行われていないサーバはいっぱいあるんだろうなぁ、ということを改めて実感しました。
 
 
もう一つちなみに、ここでは、「5.3.x」から「5.6.x」「7.0.x」「7.1.x」にバージョンアップする想定での説明ですが、「5.6.x」から「7.0.x」「7.1.x」にバージョンアップする場合も手順は全く変わりません。
 
 
PHPのバージョンアップを行うサーバ環境の確認
 
まず始めに、現在のサーバの状況を確認します。
 
ちなみに、コマンドの実行は、root権限で行います。
rootユーザに切り替えることができない場合は「sudo」コマンドを利用してください。
 
 
下記のコマンドで現在のPHPのバージョンを確認します。
| 1 2 | # php -v PHP 5.3.3 (cli) (built: Mar 22 2017 12:27:09) | 
 
先にも書きましたが、この時の PHPのバージョンが「5.3.x」ではなく「5.4.x」でも同様の手順でバージョンアップの対応は可能です。
 
 
続けて、下記のコマンドで OSのバージョンを確認します。
| 1 2 | # cat /etc/redhat-release CentOS release 6.7 (Final) | 
 
ここで確認したバージョンは、remiリポジトリを追加する際のバージョンを指定するために必要です。
 
 
さらに、下記のコマンドを実行し、現在インストールされているライブラリを確認します。
| 1 2 3 4 5 6 7 | # rpm -aq | grep php php-pdo-5.3.3-46.el6_7.1.x86_64 php-mbstring-5.3.3-46.el6_7.1.x86_64 php-common-5.3.3-46.el6_7.1.x86_64 php-cli-5.3.3-46.el6_7.1.x86_64 php-mysql-5.3.3-46.el6_7.1.x86_64 php-5.3.3-46.el6_7.1.x86_64 | 
 
ここで確認したライブラリは、PHPをアップデートする際にあわせてアップデートをするライブラリを指定するために必要です。
 
バージョンアップに必要なリポジトリの追加
 
PHPのバージョンアップをするために必要なリポジトリを追加します。
 
下記コマンドを実行し、CentOS系の epelリポジトリを追加します。
(CentOS6系、CentOS7系共通です。)
 
| 1 | # yum install epel-release | 
 
このコマンドを実行すると、処理実行の途中で 1回「Is this ok [y/N]:」と聞かれますので、「y」を入力します。
そして、最終的に「Complete!」と表示されると、リポジトリが正常に追加されたことになります。
 
「Package epel-release-6-8.noarch already installed and latest version」と表示される場合は、すでに最新のリポジトリが追加されている状態であることになります。
この場合は、すでに最新なのでそのまま作業を続行します。
 
 
続いて、下記のコマンドを実行し、CentOS系の remiリポジトリを追加します。
 
CentOS6系は以下のコマンドになります。
| 1 | # rpm -Uvh http://rpms.famillecollet.com/enterprise/remi-release-6.rpm | 
 
CentOS7系は以下のコマンドになります。
| 1 | # rpm -Uvh http://rpms.famillecollet.com/enterprise/remi-release-7.rpm | 
 
CentOS6と CentOS7の違いは、リリースナンバーの「6」と「7」の違いだけです。
 
また、「rpm」コマンドのオプションの「-U」は「アップグレード」の意味で、「-i」は「新規インストール」です。
「-U」であれば、既存のリポジトリがあればアップグレードしますし、なければ新規インストールしますので、「-U」の方が便利です。
 
詳しくは、下記のサイトを参照にしてください。
http://nakayanmer.e-central.tv/pc/rpm_com.html
 
 
PHPのバージョンアップコマンドの実行
 
いよいよ、PHPをバージョンアップするコマンドを実行します。
 
PHPを 5.6にバージョンアップする場合は、下記のコマンドを実行します。
| 1 | # yum update --enablerepo=remi,remi-php56 php php-pdo php-mbstring php-common php-cli php-mysql | 
 
このコマンドを実行すると、処理実行の途中で 2回ほど「Is this ok [y/N]:」と聞かれますので、「y」を入力します。
 
そして、最終的に「Complete!」と表示されると、正常にアップデートが完了したことが確認できます。
 
 
PHPを 7.0にバージョンアップする場合は、下記のコマンドを実行します。
| 1 | # yum update --enablerepo=remi,remi-php70 php php-pdo php-mbstring php-common php-cli php-mysql | 
 
PHPを 7.1にバージョンアップする場合は、下記のコマンドを実行します。
| 1 | # yum update --enablerepo=remi,remi-php71 php php-pdo php-mbstring php-common php-cli php-mysql | 
 
PHPのバージョンを 5.6、7.0、7.1にするコマンドの違いは、「remi-php56」の部分の数値が「70」「71」と変わるだけです。
ここの数値を変えるだけで、希望のバージョンの PHPにアップデートすることができます。
 
 
また、このコマンドの「php php-pdo php-mbstring php-common php-cli php-mysql」の部分は、インストール(アップデート)するライブラリを指定している箇所になります。
 
ここで指定するライブラリは、インストールされているライブラリを指定します。
インストールされているライブラリは、最初の項で確認した「rpm -aq | grep php」コマンドで表示されたライブラリを指定します。
 
厳密な運用をしているサーバでは、必要ないライブラリはインストールしませんが、開発環境などで、インストールするライブラリを管理していない場合は、下記のコマンドを実行し、最新のライブラリをまとめてインストールする方法でもいいでしょう。
 
| 1 | # yum update --enablerepo=remi,remi-php56 | 
 
 
また、インストールしていないライブラリを後から追加したい場合は、下記のコマンドを実行します。
先のコマンドは「update」ですが、こちらは「install」になっています。
 
| 1 | # yum install --enablerepo=remi,remi-php56 php php-soap | 
 
アップデート実施の検証
 
PHPのバージョンアップが完了したら、正しくバージョンアップできたかを確認し、Apacheを再起動して反映させます。
 
 
まず、PHPのバージョンを確認します。
一番最初に実行したコマンドと同じく下記のコマンドを実行し、PHPのバージョンが 5.6系になっていることを確認します。
 
 
| 1 2 3 4 | # php -v PHP 5.6.33 (cli) (built: Jan  3 2018 13:11:40) Copyright (c) 1997-2016 The PHP Group Zend Engine v2.6.0, Copyright (c) 1998-2016 Zend Technologies | 
 
 
続けて、下記のコマンドを実行し、Apacheの再起動を行います。
 
| 1 2 3 | # service httpd restart   もしくは # /etc/init.d/httpd graceful | 
 
Apacheの再起動コマンドは、複数存在します。
それぞれ特徴があり、詳しくは「Apacheの起動しているかの確認方法と起動、再起動、終了のコマンド」に記事を書いていますが、前者は、実行の結果が表示されますが、アクセス中のユーザがあっても強制的に再起動されます。
 
後者は、実行の結果などのメッセージは全く表示されませんが、アクセス中のユーザはアクセスが続行でき、アクセスが切れたタイミングで新しい設定に切り替わります。
 
そのため、開発環境などであれば前者を。本番環境などであれば後者を使うことが一般的です。
 
 
最後に、下記のコマンドを実行し、Apacheに PHPのバージョンアップが反映されたかを確認します。
 
下記の「phpinfo()」関数だけが記述された PHPファイルを作成します。
| 1 2 | <?php phpinfo(); | 
 
これを、ブラウザでアクセスできる場所にアップし、画面の一番上に表示される PHPのバージョンが「5.6.xx」になっていることを確認します。
これで「5.6.xx」(もしくは「7.0.xx」「7.1.xx」)になっていればすべての作業は無事に完了です。
 
 
ちなみに、下記のコマンドを実行することで、コマンドラインから「phpinfo()」関数を実行することができます。
| 1 | # php -r 'phpinfo();' | grep 'PHP Version' | 
 
ですが、このコマンドでは、Apacheを再起動をしなくても PHPのバージョンが新しいものに切り替わるため、Apacheの再起動が正しく行われ、Apacheにも新しいバージョンが反映されたかどうかの確認はできませんので注意が必要です。
GoogleAdwords
GoogleAdwords
この記事が参考になったと思いましたらソーシャルメディアで共有していただけると嬉しいです!
関連記事
-  
            
- 
      ECCUBE mtb_constants initパラメータ設定の項目を追加する方法ECCUBEのパラメータ設定で設定できる項目を追加する方法を説明します。 
-  
            
- 
      ECCUBEの新規追加ページがInternal Server Error・Not FoundにECCUBEで新規追加したページがInternal Server Errorに!原因はファイルのパーミッションの場合が多くその対処方法とプログラムの修正ポイントを解説。Not Foundも解説。 
-  
            
- 
      PHP画面が真っ白 header(“Location: $url”);PHPの開発で header(“Location: $url”);を使うと画面が真っ白になる不具合が出る場合もあります。 
-  
            
- 
      AdminerはphpMyAdmin代替のデータベース管理ツールAdminerはphpMyAdminとほぼ同機能のデータベース管理ツール。PHP 1ファイルのため設置が非常に簡単で軽快に動作し、phpMyAdminの置き換えで使うのも問題なし。 
-  
            
- 
      PHPのデバッグで使う print_r、var_dump、var_exportの動作の違いPHPのデバッグ等で変数や配列の中身を確認するために使用する関数print_r、var_dump、var_exportの動作の違い、仕様の違いについて確認した。var_exportがオススメ。 
-  
            
- 
      指定した数で文字列を丸める(n文字目で…にする)関数substr、mb_substr、mb_strimwidthの違い文字列を指定された数で抜き出すPHPの関数、substr、mb_substr、mb_strimwidthについての解説。似た関数だが引数の指定方法が違ったり、文字数がバイト数か文字数かも違ったり、注意が必要だ。 
-  
            
- 
      PHPで配列の値をダブルクオーテーションで囲んでimplodeでカンマ区切りにする方法PHPで配列の値を、preg_replace関数でクォーテーションで囲み、implode関数で「,(カンマ)」で区切ってテキスト化する方法。この方法であれば配列が空でも分岐の処理は必要なし! 
-  
            
- 
      フォルダを指定してファイルのパーミッションを変更するプログラムフォームからフォルダ、パーミッションを指定しパーミッションを変更するサンプルプログラムの解説です。 
-  
            
- 
      PHPのcURLでAPIやWebサイトへのアクセス方法。file_get_contentsとの比較PHPからWebサイトにアクセスしてHTMLを取得、APIにアクセスして情報を取得する場合は、cURLがオススメ。file_get_contentsでも可能だがエラー制御に難がありトラブルのもとになる。 
-  
            
- 
      リダイレクトループが原因で「ERR_TOO_MANY_REDIRECTS」「このページを表示できません」が出たときの対策12事例+αリダイレクトループ、自動転送設定ループの原因の解説とその対応方法を含め事例 12例を挙げて説明。 
 
         
 

 
             
             
             
             
             
             
             
             
             
            
Comment
こんばんは。
今更7.2に上げようと思っているのですが、一回削除してから入れた方が良いのでしょうか?それとも上記のようにアップデートでも問題ないのかどうか。
5.3.3なので早めに対処しなければ。。。
ちなみにアップデートの場合、php.iniは書き換えされてしまいましたか?
まさのりさん、コメントありがとうございます。
古いバージョンの PHPを削除するか、否かは、どこまで完璧なバージョンアップをしたいか、ということになるのだろうと思います。
古いバージョンのファイルが残ったりしますので。
ここに記載した手順で PHP 5.6へのバージョンアップは問題なく実施でき、php.iniも書き換えることなく動作しています。
現在もこの環境は問題が発生することなく動作しています。
ただ、PHP 7系へのバージョンアップは、VirtualBoxで環境をクローン(複製)して、バージョンアップ、動作検証をしたはずですが、細かな内容は失念してしまっています。申し訳ありません。php.iniは変更せずに動いたはずです。
また、Apacheと PHPのバージョンの関連も失念してしまっていますが、もし、Apacheを 2.2系から 2.4系にあげる必要がある場合は、httpd.confの設定方法が変わりますので、その対応が大変であったと記憶しています。
エス技研さん
こんばんは。
ご返信どうもありがとうございます。
さっそくアップデートやってみました。
まずページに記載されている内容で試してみたのですが、私の環境ではエラーでできませんでした。
# yum update –enablerepo=remi,remi-php72
これでやってみたのですが、どうもこれを見ていないようなエラーが出まくりでした。
そこで
# vi /etc/yum.repos.d/remi-php72.repo
[remi-php72]の直下にpriority=1を追記
これをやったらアップデートできました。
良かったのかどうだか定かではありませんが。
WEBサイトの表示がかなり早いですね。
おかげさまで表示の問題は出なかったのですが、やってよかったという感じです。
良いきっかけをくださってどうもありがとうございました。
今後も応援しています。
まさのりさん、コメントありがとうございます。
エラーが出たそうですが、さらに調べて対応されて、無事にアップデートできたようなので良かったです!
まさのりさんがエラーのときに対応できる方でよかったです!!
実際にあれこれやってみて上手く行ったときは嬉しいですけど、本来あるべき方法と比べて全く問題ないのか、もしくは、どこがどれくらい問題があるのか、っていうのがよく分からないところが悩ましいところですよね。
エラーなく動いてしまうと...
でも、何かのきっかけに新しい知識が入ってきたときに、気づくこともあるわけですが。
今後も役に立ちそうな記事を書いていきますので、今後ともよろしくお願いいたします!