目次

CentOS 6 で PHP のバージョンアップ

CentOS 6 で PHP 5.3 から 7.3 へバージョンアップする手順。
7.3 以外をインストールしたい場合は、バージョンを指定している箇所の数字を変更すればOK。

1.現状を確認

# PHP のバージョン確認
$ php -v
PHP 5.3.3

# OS の確認
$ cat /etc/issue
CentOS release 6.10 (Final)

# どのリポジトリからインストールしたか
$ yum info php

リポジトリー        : installed
提供元リポジトリー  : base

# インストール可能なパッケージを確認
yum list | grep php

# リポジトリを確認(以下のどちらかで確認)
$ yum repolist all
$ less /etc/yum.repos.d

2.リポジトリをインストールし直す

remi リポジトリが存在するが、古いリポジトリのようで、PHP7系が無かったため、remi リポジトリをインストールし直すことにする。
既にリポジトリにインストールしたい PHP バージョンがあれば「3.PHP を入れ直す」の手順に進む。

古いリポジトリの削除

# php.ini の場所
$ php -r "echo phpinfo();" | grep "php.ini"
Loaded Configuration File => /etc/php.ini

# 必要であれば php.ini をローカルにダウンロードしたり、バックアップを取っておく

# インストール済みのパッケージ名確認
$ rpm -qa | grep epel
epel-release-6-8.noarch

$ rpm -qa | grep remi
remi-release-6.5-1.el6.remi.noarch

# アンインストールのテスト
$ rpm -e --test epel-release-6-8.noarch

エラー: 依存性の欠如:
   epel-release >= 6 は (インストール済み)remi-release-6.5-1.el6.remi.noarch に必要とされています
   epel-release >= 6 は (インストール済み)rpmfusion-free-release-6-4.noarch に必要とされ ています
   epel-release >= 6 は (インストール済み)rpmfusion-nonfree-release-6-4.noarch に必要とされています

# 依存性のエラーが出た場合、そちらから先にアンインストールを行う

# 依存性のエラーで表示されたパッケージのアンインストールテスト
$ rpm -e --test remi-release-6.5-1.el6.remi.noarch
$ rpm -e --test rpmfusion-free-release-6-4.noarch
$ rpm -e --test rpmfusion-nonfree-release-6-4.noarch

# アンインストール(依存先から順番に削除)
$ sudo rpm -e rpmfusion-nonfree-release-6-4.noarch
$ sudo rpm -e rpmfusion-free-release-6-4.noarch
$ sudo rpm -e remi-release-6.5-1.el6.remi.noarch
$ sudo rpm -e epel-release-6-8.noarch

# リポジトリが削除されているのを確認
$ less /etc/yum.repos.d

リポジトリをインストール

以下のサイトで、最新の URL を確認する。

EPEL(CentOS 6 用に「EL6 epel-release」がある)
https://fedoraproject.org/wiki/EPEL/ja

Remi(Linux 6 用のパッケージ「remi-release-6.rpm」がある)
https://rpms.remirepo.net/

 【2022.9.30追記】
 以下の epel の URL は無効になってしまいました。
 試せてないですが、こちらのサイトで紹介されている URL なら動くかもしれません。
 https://dynamic-one.com/archives/51756838.html

# epel のインストール
$ sudo yum install https://dl.fedoraproject.org/pub/epel/epel-release-latest-6.noarch.rpm

# remi のインストール
$ sudo yum install http://ftp.riken.jp/Linux/remi/enterprise/remi-release-6.rpm

# 登録したリポジトリを確認
$ less /etc/yum.repos.d

# remi-php73.repo などが追加されている

# 自動で使用しないようにする
$ sudoedit /etc/yum.repos.d/epel.repo
[epel]
enabled=1
↓
enabled=0

3.PHP を入れ直す

# インストールしたい PHP バージョンのパッケージ確認
$ yum list | grep php73

# インストールされるパッケージの確認
$ yum info --enablerepo=epel,remi-php73 php

# インストール済みの PHP 5.3 パッケージを確認
$ yum list installed | grep php
php.x86_64            5.3.3-49.el6     @base
php-cli.x86_64        5.3.3-49.el6     @base
php-common.x86_64     5.3.3-49.el6     @base
php-devel.x86_64      5.3.3-49.el6     @base
php-gd.x86_64         5.3.3-49.el6     @base
php-mbstring.x86_64   5.3.3-49.el6     @base
php-mysql.x86_64      5.3.3-49.el6     @base
php-pdo.x86_64        5.3.3-49.el6     @base
php-pear.noarch       1:1.9.4-5.el6    @base
php-xml.x86_64        5.3.3-49.el6     @base

# php 5.3 のアンインストール
$ sudo yum remove php* -y

# PHP 7.3 のインストール(まずは php と php-common のみ)
$ sudo yum install -y --enablerepo=remi,remi-php73 php php-common

# インストールしたパッケージの確認
$ yum list installed | grep php

# その他の足りないパッケージをインストール
$ sudo yum install -y --enablerepo=remi,remi-php73 php-devel php-mbstring php-mysql php-pdo php-pear php-xml

# php-gd をインストールしようとしてエラーが出る
$ sudo yum install -y --enablerepo=remi,remi-php73 php-gd

エラー: パッケージ: gd-last-2.3.0-1.el6.remi.x86_64 (remi)
             要求: libwebp.so.5()(64bit)

# libwebp をインストール
$ sudo yum install -y --enablerepo=epel libwebp

# 再度 php-gd のインストールを試す
$ sudo yum install -y --enablerepo=remi,remi-php73 php-gd

# インストールしたパッケージの確認
$ sudo yum list installed | grep php

# バージョン確認
$ php -v
PHP 7.3.19 (cli)

# PHP のログディレクトリ作成
$ sudo mkdir /var/log/php
$ sudo chown apache:apache /var/log/php

# php.ini を編集
$ sudoedit /etc/php.ini

php.ini で以下の設定を書き換える

mbstring.language = Japanese

mbstring.detect_order = auto

date.timezone = Asia/Tokyo

expose_php = Off

memory_limit = 512M
post_max_size = 128M
upload_max_filesize = 128M

error_log = /var/log/php/error.log

php.ini の編集が終わったら、Apache を再起動する

# Apache 再起動
$ sudo service httpd graceful

# エラーログを確認
$ tail -f /var/log/php/error.log

エラーログを表示しながら、サイトにアクセスして動作確認を行う。

4.PHP のログローテーション設定

PHP のバージョンアップが問題なく終われば、ログローテーションを仕込む。

# ログディレクトリ
$ sudo ls -l /var/log/

# 先程 php.ini で設定した PHP のログディレクトリ
$ sudo ls -l /var/log/php

# ログローテーションの設定ファイルを確認
$ sudoedit /etc/logrotate.conf

# 個別設定ファイル保存先
$ ls -l /etc/logrotate.d

# httpd の設定ファイルを覗いてみる
$ less /etc/logrotate.d/httpd

# PHP のローテーションを新規作成
$ sudoedit /etc/logrotate.d/php

/var/log/php/error.log {
    notifempty
    daily
    missingok
    dateext
    rotate 14
    copytruncate
}

# 確認
$ sudo logrotate -dv /etc/logrotate.d/php

# 強制的に実行
$ sudo logrotate -fv /etc/logrotate.d/php

# ローテーションされたか確認
$ sudo ls -l /var/log/php

# ログファイルの確認
$ less /var/log/php/error.log