CentOS7でPHP7にアップグレードする方法

提供:Dev Guides
移動先:案内検索

序章

2015年12月3日にリリースされたPHP7は、スカラー型ヒントなどの新機能とともに、以前のバージョンの言語よりも大幅な速度の向上を約束します。 このガイドでは、コミュニティが提供するパッケージを使用して、PHP 5.x(任意のリリース)を実行しているApacheまたはNginxWebサーバーをPHP7にすばやくアップグレードする方法について説明します。

警告:ほとんどのメジャーバージョンの言語リリースと同様に、本番環境でPHP7に切り替える前に少し待つことをお勧めします。 それまでの間、新しいリリースとの互換性についてアプリケーションをテストし、ベンチマークを実行して、新しい言語機能に慣れておく良い機会です。


データベース管理のためにphpMyAdminをインストールした場合、phpMyAdminパッケージはまだアップグレードをサポートしていないため、アップグレードする前に公式のCentOSPHP7パッケージを待つことを強くお勧めします。 アクティブユーザーで他のサービスやアプリケーションを実行している場合は、最初にステージング環境でこのプロセスをテストするのが最も安全です。

前提条件

このガイドは、mod_phpをApacheと組み合わせて使用するか、PHP-FPMをNginxと組み合わせて使用して、CentOS7でPHP5.xを実行していることを前提としています。 また、管理タスク用にsudo権限で構成された非rootユーザーがいることも前提としています。

PHP 5のインストールプロセスは、次のガイドに記載されています。

IUSコミュニティプロジェクトリポジトリへの登録

PHP 7.xは、主要なディストリビューションの公式リポジトリにまだパッケージ化されていないため、サードパーティのソースに依存する必要があります。 いくつかのリポジトリはPHP7RPMファイルを提供します。 IUSリポジトリを使用します。

IUSは、リポジトリにサブスクライブし、関連するGPGキーをインポートするためのインストールスクリプトを提供しています。 ホームディレクトリにいることを確認し、curlを使用してスクリプトを取得します。

cd ~
curl 'https://setup.ius.io/' -o setup-ius.sh

スクリプトを実行します。

sudo bash setup-ius.sh

Apacheでmod_phpをアップグレードする

このセクションでは、ApacheをWebサーバーとして使用し、mod_phpを使用してPHPコードを実行するシステムのアップグレードプロセスについて説明します。 代わりに、NginxとPHP-FPMを実行している場合は、次のセクションに進んでください。

既存のPHPパッケージを削除することから始めます。 y を押し、 Enter を押して、プロンプトが表示されたら続行します。

sudo yum remove php-cli mod_php php-common

IUSから新しいPHP7パッケージをインストールします。 もう一度、プロンプトが表示されたら y を押し、Enterを押します。

sudo yum install mod_php70u php70u-cli php70u-mysqlnd

最後に、Apacheを再起動して、新しいバージョンのmod_phpをロードします。

sudo apachectl restart

systemctlを使用して、httpdsystemdユニットによって管理されているApacheのステータスを確認できます。

systemctl status httpd

Nginxを使用したPHP-FPMのアップグレード

このセクションでは、WebサーバーとしてNginxを使用し、PHPコードを実行するためにPHP-FPMを使用するシステムのアップグレードプロセスについて説明します。 すでにApacheベースのシステムをアップグレードしている場合は、PHPテストのセクションに進んでください。

既存のPHPパッケージを削除することから始めます。 y を押し、 Enter を押して、プロンプトが表示されたら続行します。

sudo yum remove php-fpm php-cli php-common

IUSから新しいPHP7パッケージをインストールします。 もう一度、プロンプトが表示されたら y を押し、Enterを押します。

sudo yum install php70u-fpm-nginx php70u-cli php70u-mysqlnd

インストールが完了したら、PHP-FPMとNginxの両方の構成をいくつか変更する必要があります。 構成されているように、PHP-FPMはローカルTCPソケットで接続をリッスンしますが、Nginxはファイルシステム上のパスにマップされるUnixドメインソケットを予期します。

PHP-FPMは、子プロセスの複数のプールを処理できます。 構成されているように、wwwと呼ばれる単一のプールを提供します。これは/etc/php-fpm.d/www.confで定義されています。 nano(またはお好みのテキストエディタ)でこのファイルを開きます。

sudo nano /etc/php-fpm.d/www.conf

listen = 127.0.0.1:9000を含むブロックを探します。これは、PHP-FPMにポート9000のループバックアドレスをリッスンするように指示します。 この行をセミコロンでコメントし、数行下のlisten = /run/php-fpm/www.sockのコメントを外します。

/etc/php-fpm.d/www.conf

; The address on which to accept FastCGI requests.
; Valid syntaxes are:
;   'ip.add.re.ss:port'    - to listen on a TCP socket to a specific IPv4 address on
;                            a specific port;
;   '[ip:6:addr:ess]:port' - to listen on a TCP socket to a specific IPv6 address on
;                            a specific port;
;   'port'                 - to listen on a TCP socket to all addresses
;                            (IPv6 and IPv4-mapped) on a specific port;
;   '/path/to/unix/socket' - to listen on a unix socket.
; Note: This value is mandatory.
;listen = 127.0.0.1:9000
; WARNING: If you switch to a unix socket, you have to grant your webserver user
;          access to that socket by setting listen.acl_users to the webserver user.
listen = /run/php-fpm/www.sock

次に、listen.acl_users値を含むブロックを探し、listen.acl_users = nginxのコメントを解除します。

/etc/php-fpm.d/www.conf

; When POSIX Access Control Lists are supported you can set them using
; these options, value is a comma separated list of user/group names.
; When set, listen.owner and listen.group are ignored
;listen.acl_users = apache,nginx
;listen.acl_users = apache
listen.acl_users = nginx
;listen.acl_groups =

終了してファイルを保存します。 nanoでは、 Ctrl-X を押して終了し、 y を押して確認し、Enterを押して上書きするファイル名を確認することでこれを実行できます。

次に、NginxがPHPファイルを処理するために正しいソケットパスを使用していることを確認します。 /etc/nginx/conf.d/default.confを開くことから始めます。

sudo nano /etc/nginx/conf.d/php-fpm.conf

php-fpm.confアップストリームを定義します。これは、他のNginx構成ディレクティブから参照できます。 アップストリームブロック内で、#を使用してserver 127.0.0.1:9000;をコメントアウトし、server unix:/run/php-fpm/www.sock;のコメントを解除します。

/etc/nginx/conf.d/php-fpm.conf

# PHP-FPM FastCGI server
# network or unix domain socket configuration

upstream php-fpm {
        #server 127.0.0.1:9000;
        server unix:/run/php-fpm/www.sock;
}

ファイルを終了して保存し、/etc/nginx/conf.d/default.confを開きます。

sudo nano /etc/nginx/conf.d/default.conf

location ~ \.php$ {で始まるブロックを探します。 このブロック内で、fastcgi_passディレクティブを探します。 この行をコメントアウトまたは削除し、fastcgi_pass php-fpmに置き換えます。これは、php-fpm.confで定義されたアップストリームを参照します。

/etc/nginx/conf.d/default.conf

  location ~ \.php$ {
      try_files $uri =404;
      fastcgi_split_path_info ^(.+\.php)(/.+)$;
      # fastcgi_pass unix:/var/run/php-fpm/php-fpm.sock;
      fastcgi_pass php-fpm;
      fastcgi_index index.php;
      fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
      include fastcgi_params;
  }

ファイルを終了して保存し、PHP-FPMとNginxを再起動して、新しい構成ディレクティブを有効にします。

sudo systemctl restart php-fpm
sudo systemctl restart nginx

systemctlを使用して、各サービスのステータスを確認できます。

systemctl status php-fpm
systemctl status nginx

PHPのテスト

Webサーバーを構成し、新しいパッケージをインストールすると、PHPが稼働していることを確認できるはずです。 コマンドラインでインストールされているPHPのバージョンを確認することから始めます。

php -v

出力

PHP 7.0.1 (cli) (built: Dec 18 2015 16:35:26) ( NTS )
Copyright (c) 1997-2015 The PHP Group
Zend Engine v3.0.0, Copyright (c) 1998-2015 Zend Technologies

Webサーバーのドキュメントルートにテストファイルを作成することもできます。 その場所はサーバー構成によって異なりますが、ドキュメントルートは通常次のいずれかのディレクトリに設定されます。

  • /var/www/html
  • /var/www/
  • /usr/share/nginx/html

nanoを使用して、ドキュメントルートでinfo.phpという名前の新しいファイルを開きます。 デフォルトでは、Apacheでは次のようになります。

sudo nano /var/www/html/info.php

Nginxでは、代わりに次を使用できます。

sudo nano /usr/share/nginx/html/info.php

次のコードを貼り付けます。

info.php

<?php
phpinfo();

info.phpを保存して、エディターを終了します。 次に、ブラウザに次のアドレスをロードします。

http://server_domain_name_or_IP/info.php

実行中のバージョンと構成をリストしたPHP7情報ページが表示されます。 これを再確認したら、info.phpを削除するのが最も安全です。

sudo rm /var/www/html/info.php

これで、PHP7が正常にインストールされました。 ここから、ErikaHeidiのGetting Ready for PHP 7 ブログ投稿をチェックして、公式移行ガイドを確認することをお勧めします。