CentOS の PHP を 5.4 から 5.5 にバージョンアップしたときの記録です。APC の代替手段として OPcache と APCu もインストールしています。導入にあたり実行したコマンドや php.ini の設定などを紹介します。
動作確認環境
- CentOS 6.5
目次
- 更新前の PHP 5.4 は remi からインストール
- remi リポジトリの設定を確認
- 更新予定のパッケージを確認
- APC をアンインストール
- PHP を 5.4 から 5.5 に更新
- php.ini を設定
- mbstring 設定
- Zend OPcache をインストール
- APCu をインストール
- 動作確認
更新前の PHP 5.4 は remi からインストール
更新前の PHP 5.4 は、remi リポジトリからインストールしています。設定等は以下の記事にまとめてあります。
-
お名前.com VPS にPHPをインストールし、APC、memcachedなど設定する
お名前.com VPS メモリ2G プランに Nginx で WordPress を構築するメモ、第7回目。前回はMyS ...
続きを見る
remi リポジトリの設定を確認
remi リポジトリには、PHP 5.5 を扱うためのリポジトリ remi-php55 が追加されています。remi-php55 が有効になっているかどうか、/etc/yum.repos.d/remi.repo を確認しましょう。
/etc/yum.repos.d/remi.repo
...
[remi-php55]
name=Les RPM de remi de PHP 5.5 pour Enterprise Linux 6 - $basearch
#baseurl=http://rpms.famillecollet.com/enterprise/6/php55/$basearch/
mirrorlist=http://rpms.famillecollet.com/enterprise/6/php55/mirror
# WARNING: If you enable this repository, you must also enable "remi"
enabled=0
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-remi
...
# WARNING: If you enable this repository, you must also enable "remi"
[remi-php55-debuginfo]
name=Les RPM de remi de PHP 5.5 pour Enterprise Linux 6 - $basearch - debuginfo
baseurl=http://rpms.famillecollet.com/enterprise/6/debug-php55/$basearch/
enabled=0
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-remi
remi-php55 の設定が見つからない場合は、yum update remi して remi リポジトリを更新してください。同じディレクトリに remi.repo.rpmnew というファイルができていると思いますので、diff をとって 差分を remi.repo にマージしてください。
# diff remi.repo remi.repo.rpmnew
更新予定のパッケージを確認
remi.repo の設定が終わったら、yum info を実行してみます。PHP 5.5 が Available Packages に表示されます。
# yum info php --enablerepo=remi-php55,remi
Installed Packages
Name : php
Arch : x86_64
Version : 5.4.25
Release : 1.el6.remi
Size : 9.2 M
Repo : installed
From repo : remi
...
Available Packages
Name : php
Arch : x86_64
Version : 5.5.9
Release : 1.el6.remi
Size : 2.5 M
Repo : remi-php55
...
yum check-update コマンドも実行してみます。更新予定パッケージが表示されます。
# yum check-update --enablerepo=remi-php55,remi
php.x86_64 5.5.9-1.el6.remi remi-php55
php-cli.x86_64 5.5.9-1.el6.remi remi-php55
php-common.x86_64 5.5.9-1.el6.remi remi-php55
php-fpm.x86_64 5.5.9-1.el6.remi remi-php55
php-intl.x86_64 5.5.9-1.el6.remi remi-php55
php-mbstring.x86_64 5.5.9-1.el6.remi remi-php55
php-pdo.x86_64 5.5.9-1.el6.remi remi-php55
php-pecl-apc.x86_64 3.1.15-0.4.20130912.el6.remi.5.5 remi-php55
php-pecl-igbinary.x86_64 1.1.2-0.5.git3b8ab7e.el6.remi.1 remi-php55
php-pecl-memcached.x86_64 2.1.0-7.el6.remi.5.5 remi-php55
php-process.x86_64 5.5.9-1.el6.remi remi-php55
php-xml.x86_64 5.5.9-1.el6.remi remi-php55
Obsoleting Packages
php-mysqlnd.x86_64 5.5.9-1.el6.remi remi-php55
php-mysql.x86_64 5.4.25-1.el6.remi @remi
php-pecl-apcu.x86_64 4.0.3-1.el6.remi.5.5 remi-php55
php-pecl-apc.x86_64 3.1.15-0.3.svn329913.el6.remi @remi
php-mysql と php-pecl-apc が Obsoleting Packages になっていますね。注意しておきましょう。
APC をアンインストール
APC は PHP 5.5 では利用できませんので、更新前にアンインストールしておきます。
# yum remove php-pecl-apc
PHP を 5.4 から 5.5 に更新
yum update で PHP 5.4 から PHP 5.5 に更新します。
# yum update php --enablerepo=remi-php55,remi
Installing:
php-mysqlnd 5.5.9-1.el6.remi remi-php55
replacing php-mysql.x86_64 5.4.25-1.el6.remi
Updating:
php 5.5.9-1.el6.remi remi-php55
Installing for dependencies:
php-pecl-jsonc 1.3.3-1.el6.remi.5.5 remi-php55
php-pecl-zip 1.12.4-1.el6.remi.5.5 remi-php55
Updating for dependencies:
php-cli 5.5.9-1.el6.remi remi-php55
php-common 5.5.9-1.el6.remi remi-php55
php-fpm 5.5.9-1.el6.remi remi-php55
php-intl 5.5.9-1.el6.remi remi-php55
php-mbstring 5.5.9-1.el6.remi remi-php55
php-pdo 5.5.9-1.el6.remi remi-php55
php-pecl-igbinary 1.1.2-0.5.git3b8ab7e.el6.remi.1 remi-php55
php-pecl-memcached 2.1.0-7.el6.remi.5.5 remi-php55
php-process 5.5.9-1.el6.remi remi-php55
php-xml 5.5.9-1.el6.remi remi-php55
Install 3 Package(s)
Upgrade 11 Package(s)
Is this ok [y/N]: y
問題なさそうなので、更新を実行します。実行すると何件か warning が出てきました。PHP 5.5 用の config ファイルが退避されたようです。diff をとって必要があれば merge しておきましょう。
warning: /etc/php.ini created as /etc/php.ini.rpmnew
warning: /etc/httpd/conf.d/php.conf created as /etc/httpd/conf.d/php.conf.rpmnew
warning: /etc/php-fpm.d/www.conf created as /etc/php-fpm.d/www.conf.rpmnew
php.ini.rpmnew 等のファイルは、PHP 5.5 のデフォルト php.ini です。削除せずに、php.ini.org 等の名前にして保存しておくことをおすすめします。設定をデフォルトに戻したい時に役立ちます。
php.ini を設定
php.ini のデフォルトからの変更点です。
/etc/php.ini
expose_php = Off
error_reporting = E_ALL & ~E_STRICT
display_errors = Off
error_log = /var/log/php.log
default_charset = "UTF-8"
date.timezone = Asia/Tokyo
session.cookie_secure = 1
session.cookie_httponly = 1
session.hash_function = 1
short_open_tag = Off
mbstring 設定
mbstring.iniのデフォルトからの変更点です
/etc/php.d/mbstring.ini
mbstring.language = Japanese
mbstring.internal_encoding = UTF-8
mbstring.http_input = UTF-8
mbstring.http_output = pass
mbstring.detect_order = UTF-8,SJIS,EUC-JP,JIS,ASCII
mbstring の設定はマニュアルをご確認ください。
Zend OPcache をインストール
Zend OPcache をインストールしてオペコードキャッシュを有効にします。オペコードキャッシュとは、コンパイル後のコードをメモリに保存して再利用することでパフォーマンスを向上させる仕組みです。PHP 5.4 までは APC でオペコードキャッシュを利用するのが一般的でした。
# yum install php-opcache --enablerepo=remi-php55,remi
設定サンプルです。
/etc/php.d/opcache.ini
[opcache]
opcache.enable=1
opcache.enable_cli=1
opcache.memory_consumption=128
opcache.interned_strings_buffer=8
opcache.max_accelerated_files=4000
opcache.revalidate_freq=60
opcache.fast_shutdown=1
設定の詳細、デフォルト値はマニュアルをご確認ください。
Opcache の設定は opcache-status を見ながら調整すると良いと思います。
rlerdorf/opcache-status - GitHub
opcache.php にブラウザからアクセスしてモニタ表示します。
APCu をインストール
APC の代替手段としてインストールした OPcache は、ユーザーキャッシュ機能を持っていないので、APCu で補います。ユーザーキャッシュとは、オブジェクトや変数をメモリに保存して、別のリクエストからそれを再利用することでパフォーマンスを向上させる仕組みです。ユーザーキャッシュを利用するには、APCu の提供する関数を使用します。
# yum install php-pecl-apcu --enablerepo=remi-php55,remi
設定サンプルです。
/etc/php.d/apcu.ini
apc.enabled=1
apc.enable_cli=1
apc.shm_size=32M
apc.ttl=3600
apc.gc_ttl=3600
apc.mmap_file_mask=/tmp/apc.XXXXXX
設定の詳細、デフォルト値はマニュアルをご確認ください。APCu のインターフェースは APC と同じです。
APCu の設定はモニタを見ながら調整します。
apc.php にブラウザからアクセスしてモニタを表示します。
動作確認
Apache、Nginx、php-fpm を再起動して、php -v コマンドや、phpinfo を確認します。
# php -v
PHP 5.5.9 (cli) (built: Feb 11 2014 08:20:23)
Copyright (c) 1997-2014 The PHP Group
Zend Engine v2.5.0, Copyright (c) 1998-2014 Zend Technologies
with Zend OPcache v7.0.3, Copyright (c) 1999-2014, by Zend Technologies