つい先日PHP7のベータ版が出ました。
PHP5.6からの変更点は色々ありますがやはりパフォーマンスの向上が一番のポイントではないでしょうか。
この点についてはこちらがわかりやすいです。
実際にWordpressを動かしてどの程度違うのか実験してみましょう。
インスタンス作成
まずAWS上にOSをAmazonlinux 2015.3にしてインスタンスを立ち上げます。
どうせすぐに消すのでスポットインスタンスで作ってみました。オンデマンドのt2.microよりもスポットのm3.mediumの方が安いです。
CLIで以下のJSONを読み込んで作成しましたが、当然AWSコンソールからでも問題ありません。
{
"DryRun": false,
"SpotPrice": "0.020",
"InstanceCount": 1,
"LaunchSpecification": {
"InstanceType": "m3.medium",
"KeyName": "xxxxxxxx",
"ImageId": "ami-cbf90ecb",
"BlockDeviceMappings": [
{
"DeviceName": "/dev/xvda",
"Ebs": {
"DeleteOnTermination": true,
"VolumeSize": 8,
"VolumeType": "gp2"
}
}
],
"NetworkInterfaces":[
{
"DeviceIndex":0,
"SubnetId":"subnet-xxxxxxxx",
"Groups":[
"sg-xxxxxxxx"
],
"AssociatePublicIpAddress": true
}
]
}
}
上記JSONのxxxxxxxxを各自の環境の値にして下記コマンドで作成出来ます。
$ aws ec2 request-spot-instances --cli-input-json file:///path/to/ec2_spot.json --profile xxxx
サーバー設定
その後ログインしてrootになってPHP7とPHP5.6の両方が使えるようにしてみます。
下記のコマンドは、使い捨てのインスタンスなので、Wordpressが動くだけ&セキュリティー的な事は考慮していませんので注意して下さい。
# yum -y install php56 php56-mysqlnd php56-opcache
# yum -y install mysql-server mysql-devel #mysql-develはPHPのコンパイルに必要
# yum -y install httpd24-devel libxml2-devel #PHPのコンパイルに必要
# yum -y groupinstall development tools #これがないとコンパイルできない。
# wget https://downloads.php.net/~ab/php-7.0.0beta2.tar.xz
# tar Jxf php-7.0.0beta2.tar.xz
# cd php-7.0.0beta2
# ./configure \
> --prefix=/usr/php7 \
> --with-apxs2 \
> --enable-pdo \
> --with-mysqli \
> --with-pdo-mysql \
> --enable-opcache
# make
# make install
# cp php.ini-development /usr/php7/lib/php.ini
# echo "zend_extension=opcache.so" >> /usr/php7/lib/php.ini #これでPHP7でopcacheが有効になる。
# #apacheのPHP設定が自動的にされていますが、PHP7とPHP5.6が簡単に切り替えられるように書き換えています。
# mv /etc/httpd/conf.d/php.conf /etc/httpd/conf.d/php.conf.bak
# mv /etc/httpd/conf.modules.d/10-php.conf /etc/httpd/conf.modules.d/10-php.conf.bak
# echo "AddType application/x-httpd-php .php" > /etc/httpd/conf.d/php.conf
# echo "DirectoryIndex index.php" >> /etc/httpd/conf.d/php.conf
# echo "LoadModule php7_module /usr/lib64/httpd/modules/libphp7.so" > /etc/httpd/conf.modules.d/10-php.conf
#
# #PHP7のmake install時に勝手に追加されてしまうのでコメントアウト
# sed -i "s/LoadModule php7_module/#LoadModule php7_module/" /etc/httpd/conf/httpd.conf
# sudo /etc/init.d/httpd start
# #mysqlの設定。rootのパスワードはなし。wordpress用にDB,ユーザー名、パスワード全て"wordpress"にしてあります。
# sudo /etc/init.d/mysqld start
# mysql mysql
mysql> CREATE DATABASE wordpress;
mysql> GRANT ALL ON wordpress.* to wordpress@localhost;
mysql> FLUSH PRIVILEGES;
mysql> SET PASSWORD FOR wordpress@localhost=password('wordpress');
mysql> \q
Bye
# #Wordpressのインストール
# cd /var/www/html
# wget https://ja.wordpress.org/wordpress-4.2.2-ja.zip
# unzip wordpress-4.2.2-ja.zip
# cd wordpress
# cp wp-config-sample.php wp-config.php
# vi wp-config.php #※1
※1
wp-config.phpのデータベース名、ユーザー名、パスワードは全て"wordpress"です。
MySQLのホスト名は"127.0.0.1"に変更して下さい。"localhost"のままだとDBにつながりません。
これで下記URLにアクセスすればWordpressのインストール画面が表示されるはずです。
http://インスタンスのIPアドレス/wordpress/
速度計測
AWS上の別インスタンスからトップページに対してabを行った結果です。何回かやりましたが大体同じような結果でした。
# ab -c 5 -n 100 http://xxx.xxx.xxx.xxx/wordpress/
PHP | opcacheあり[sec] | opcacheなし[sec] |
---|---|---|
7.0.0 bata2 | 25.43 | 5.08 |
5.6.10 | 10.29 | 3.35 |
opcacheを効かせた状態だと2.5倍くらい速いですね。
補足
PHP5.6のopcacheをオフにするには下記コマンドのように設定ファイルを読みこまないようにして下さい。
# mv /etc/php.d/10-opcache.ini /etc/php.d/10-opcache.ini.bak
PHP7の場合は/usr/php7/lib/php.iniに追加したzend_extension=opcache.so
の行をコメントアウトするだけです。
PHP7とphp5.6の切替は/etc/httpd/conf.modules.d/10-php.conf
の中身を書き換えて下さい。
これを実行すればPHP5.6が動く
# echo "LoadModule php5_module modules/libphp-5.6.so" > /etc/httpd/conf.modules.d/10-php.conf
こっちならPHP7が動く
# echo "LoadModule php7_module /usr/lib64/httpd/modules/libphp7.so" > /etc/httpd/conf.modules.d/10-php.conf
その後apacheを再起動して下さい。