CentOS PHP

CentOS 7のApache環境にPHP7.2をインストールして基本的な設定を行う

2018年5月16日

centos-php-inst-top3

以前の記事でCentOS上にApache httpdのインストールとSSL環境を構築する手順を紹介しました。

Open Source
centos-httpd-inst-top3
CentOS 7へApacheをインストールして最短でウェブサーバーを構築

以前のCentOS環境構築に関する記事でCentOSのインストールと基本的な設定までが完了しました。折角、作成した環境。利用しない手はありません。本記事では、以前の記事で構築したCentOSの環境を利 ...

Open Source
centos-apache-ssl-top
CentOS 7とApacheをインストールした環境にLet's EncryptでHTTPSを設定

2018年7月から代表的なウェブブラウザであるGoogle Chromeの仕様変更(バージョン68)により、HTTPS化されていないウェブサイトには「保護されていません」と表示されるようになります。( ...

その記事で構築したCentOS 7とHTTPSの環境へPHPをインストールしてテスト用のページが表示できるところまでを紹介します。昨今のウェブサイトは静的なHTMLではなく、ユーザーの要求に応えて動的にHTMLを生成するアプリケーションサーバーで作成されていることが殆どです。このアプリケーションサーバーとしてオープンソースで代表的なものがPHPです。PHPで記述されたアプリケーションはWordPressやEC-CUBE等、現在のウェブサイトを構成する上で欠かせないものばかりになります。
是非、本記事を参考にPHPを導入してみて下さい。

尚、PHP 7.2を導入する環境は以前の記事

で紹介していますが、基本的な環境について改めて記載しておきます。

  • OSのバージョンはCentOSで最新(2018年5月現在)のバージョン7.5を利用しています。
  • ウェブサーバーとしてApache httpd 2.4.6がインストールされています。
  • Apacheは基本的な設定が完了して、テストページが表示されています。
  • ApacheはHTTPS通信に対応した設定が完了しています。
  • サーバーはインターネットへ接続されており、グローバルIPアドレスが一つ、割り当てられています。
  • ファイアウォールとしてfirewalldを設定しています。

この環境を前提にPHPの導入と設定を進めていきます。

スポンサーリンク

1. PHP導入の前提条件

PHPの導入にあたって、前提条件は以下の通りです。
OSのバージョンは2018年5月現在で、最新のCentOS 7.5を利用します。実際のバージョンを確認してみます。

$ cat /etc/redhat-release
CentOS Linux release 7.5.1804 (Core)

上記から7.5であることが確認できました。併せてApache httpdのバージョンについても確認します。Apache httpdのバージョンは以下のコマンドで確認できます。

# httpd -V | head -n 1
Server version: Apache/2.4.6 (CentOS)

上記からApache httpdのバージョンが2.4.6であることが確認できました。
導入するphpのバージョンですが、現在、利用されている主なバージョンとしては

  • 5.4系(CentOSのベースに登録されているもの、OSのサポート期間に準ずる)
  • 5.6系(2018年12月31日でサポート終了)
  • 7.1系(7系の前バージョン、サポート期間がやや短い)
  • 7.2系(最新のメジャーバージョン、サポート期間が長い)

の4つがあります。これ以前のバージョン(OSのベースパッケージ以外で導入したPHPについては5.4もサポートが終了しています。)については、サポートされていないため、対象外としています。本記事ではセキュリティ面とパフォーマンス(PHP5系と比較して2倍の処理能力ある)から7.2系をインストールしていきます。

2. PHPインストール前の事前準備

PHP7.2系のインストール前に事前準備を行います。作業としては、導入する環境にOSデフォルトのPHPがインストールされていないかを確認することと、php7.2系をインストールするのに必要なレポジトリであるremiレポジトリの追加になります。

2-1. PHP5.4系のインストール確認

PHP7.2系をインストールする前にOSデフォルトのphp(5.4系)がインストールされていないことを確認します。5.4系がインストールされていると、設定ファイルやモジュールの読み込み時に混乱する可能性があります。以下のコマンドでphpがインストールされていないことを確認します。

$ yum list installed | grep php

phpに関するパッケージが表示されないことが確認できれば、完了です。もし出力結果にphpが含まれている場合は

# yum remove php*

などでPHP5系のパッケージを削除してください。

2-2. remiレポジトリの設定

OSデフォルトではPHP7.2系に関するパッケージを探してみても見つかりません。これはOSのベースに用意されているレポジトリにはPHPの7.2系は含まれていなことが原因です。

2-2-1. remiレポジトリの追加

remiレポジトリはEPELの補完的な立ち位置の外部リポジトリです。有志によって管理されているプロジェクトになります。
remiの目的ですが、最新バージョンのPHPモジュールをRHEL系のディストリビューションに提供することです。このレポジトリをインストールします。
なお、remiのリポジトリを追加するには、EPELリポジトリが追加されている必要があります。EPELレポジトリはHTTPSを設定する際に追加済みなので、ここでは手順を割愛しています。
※6月23日追記:epelレポジトリがインストールされていなくても、yumコマンドの依存関係でremiレポジトリをインストールする際にepelレポジトリもインストールされます。

上記の公式サイトにリンクにあるRedhat enterprise linux 7用のremiを利用します。インストールにはyumコマンドを利用します。
以下のように実行します。

yum -y install http://rpms.famillecollet.com/enterprise/remi-release-7.rpm

以下が実行結果です。

読み込んだプラグイン:fastestmirror
remi-release-7.rpm | 14 kB 00:00:00
/var/tmp/yum-root-w2GSAd/remi-release-7.rpm を調べています: remi-release-7.4-2.el7.remi.noarch
/var/tmp/yum-root-w2GSAd/remi-release-7.rpm をインストール済みとして設定しています
依存性の解決をしています
--> トランザクションの確認を実行しています。
---> パッケージ remi-release.noarch 0:7.4-2.el7.remi を インストール
--> 依存性解決を終了しました。依存性を解決しました

インストール中:
remi-release noarch 7.4-2.el7.remi /remi-release-7 15 k

トランザクションの要約

インストール 1 パッケージ

合計容量: 15 k
インストール容量: 15 k
Downloading packages:
Running transaction check
Running transaction test
Transaction test succeeded
Running transaction
警告: RPMDB は yum 以外で変更されました。
インストール中 : remi-release-7.4-2.el7.remi.noarch 1/1
検証中 : remi-release-7.4-2.el7.remi.noarch 1/1

インストール:
remi-release.noarch 0:7.4-2.el7.remi

完了しました!

エラーが出力なく”完了しました!”と表示されれば、remiレポジトリの追加は完了です。
追加後には、レポジトリを設定するファイルとしてphp関連のものが追加されていることが確認できます。
※レポジトリファイルは/etc/yum.repos.d/以下に含まれています。以下が追加後のディレクトリ一覧になります。

01:35 CentOS-Base.repo
01:35 CentOS-CR.repo
01:35 CentOS-Debuginfo.repo
01:35 CentOS-Media.repo
01:35 CentOS-Sources.repo
01:35 CentOS-Vault.repo
01:35 CentOS-fasttrack.repo
2017 epel-testing.repo
2017 epel.repo
22:28 remi-php54.repo
22:28 remi-php70.repo
22:28 remi-php71.repo
22:28 remi-php72.repo
22:28 remi-safe.repo
22:28 remi.repo

remi関連のファイルが追加されていることが確認できます。

2-2-2. remiレポジトリの追加の確認

remiレポジトリでPHP7.2系の導入に利用するレポジトリはremi-php72レポジトリになります。remi-php72レポジトリはデフォルトでは有効になっていません。それ程、使用頻度も高くないことからphp7.2系に関連したyumコマンドを実行する際だけ有効にするようにします。
この場合はyumコマンドにオプションである”--enable-repo=remi,remi-php72”を付与します。例えばphpパッケージを探す場合は以下のように実行します。

$ yum info --enablerepo=remi,remi-php72 php

実行結果は以下の通りです。

読み込んだプラグイン:fastestmirror
Loading mirror speeds from cached hostfile
* base: ftp.iij.ad.jp
* epel: mirrors.aliyun.com
* extras: ftp.iij.ad.jp
* remi: mirrors.thzhost.com
* remi-php72: mirrors.thzhost.com
* remi-safe: mirrors.thzhost.com
* updates: ftp.iij.ad.jp
利用可能なパッケージ
名前 : php
アーキテクチャー : x86_64
バージョン : 7.2.5
リリース : 1.el7.remi
容量 : 3.2 M
リポジトリー : remi-php72
要約 : PHP scripting language for creating dynamic web sites
URL : http://www.php.net/
ライセンス : PHP and Zend and BSD and MIT and ASL 1.0
説明 : PHP is an HTML-embedded scripting language. PHP attempts to make it
: easy for developers to write dynamically generated web pages. PHP also
: offers built-in database integration for several commercial and
: non-commercial database management systems, so writing a
: database-enabled webpage with PHP is fairly simple. The most common
: use of PHP coding is probably as a replacement for CGI scripts.
:
: The php package contains the module (often referred to as mod_php)
: which adds support for the PHP language to Apache HTTP Server.

php7.2系のパッケージについて詳細が表示されます。remiレポジトリを有効にするオプションを付与して再度、phpのパッケージを探してみます。

$ yum search --enablerepo=remi,remi-php72 php
読み込んだプラグイン:fastestmirror
Loading mirror speeds from cached hostfile
* base: ftp.iij.ad.jp
* epel: mirror.dmmlabs.jp
* extras: ftp.iij.ad.jp
* remi-php72: mirrors.tuna.tsinghua.edu.cn
* remi-safe: mirrors.tuna.tsinghua.edu.cn
* updates: ftp.iij.ad.jp

【略】

php72-php-pecl-handlebars-devel.x86_64 : php72-php-pecl-handlebars developer files (header)
php72-php-pecl-propro-devel.x86_64 : php72-php-pecl-propro developer files (header)
php72-php-pecl-psr-devel.x86_64 : php72-php-pecl-psr developer files (header)
php72-php-pecl-raphf-devel.x86_64 : php72-php-pecl-raphf developer files (header)
php72-php-pecl-swoole-devel.x86_64 : php72-php-pecl-swoole developer files (header)
php72-php-pecl-swoole2-devel.x86_64 : php72-php-pecl-swoole2 developer files (header)
php72-php-pecl-xmldiff-devel.x86_64 : php72-php-pecl-xmldiff developer files (header)
php72-php-pecl-yaconf-devel.x86_64 : php72-php-pecl-yaconf developer files (header)
php72-runtime.x86_64 : Package that handles php72 Software Collection.

Name and summary matches only, use "search all" for everything.

今度はPHPのバージョン7.2系を含むパッケージが表示されることが確認できました。この中で必要になるものは以下のパッケージになります。
php7.2系基本パッケージ

  • php.x86_64 : Package that installs PHP 7.2
  • php-xml.x86_64 : A module for PHP applications which use XML
  • php-xmlrpc.x86_64 : A module for PHP applications which use the XML-RPC protocol
  • php-pecl-mcrypt.x86_64 : Provides bindings for the unmaintained libmcrypt.

マルチバイト対応用パッケージ

  • php-mbstring.x86_64 : A module for PHP applications which need multi-byte string handling

画像処理用パッケージ

  • php-gd.x86_64 : A module for PHP applications for using the gd graphics library

MySQLデータベース連携用パッケージ

  • php-pdo.x86_64 : A database access abstraction module for PHP applications
  • php-mysqlnd.x86_64 : A module for PHP applications that use MySQL databases
  • php-pecl-mysql.x86_64 : MySQL database access functions

上記のphpパッケージをインストール対象とします。

スポンサーリンク

3. phpパッケージのインストール

本章では実際にphp7.2系のパッケージをインストールする手順を紹介していきます。

3-1. phpパッケージの情報確認

php72パッケージのインストール前に、パッケージの情報を確認しておきます。

$ yum info --enablerepo=remi,remi-php72 php php-mbstring php-xml php-xmlrpc php-gd php-pdo php-pecl-mcrypt php-mysqlnd php-pecl-mysql

実行結果は以下の通りです。各パッケージの役割などを確認しておくと、インストールするパッケージの意味合いをイメージしやすいと思います。

読み込んだプラグイン:fastestmirror
Determining fastest mirrors
* base: ftp.iij.ad.jp
* epel: mirrors.aliyun.com
* extras: ftp.iij.ad.jp
* remi: mirrors.tuna.tsinghua.edu.cn
* remi-php72: mirrors.tuna.tsinghua.edu.cn
* remi-safe: mirrors.tuna.tsinghua.edu.cn
* updates: ftp.iij.ad.jp
利用可能なパッケージ
名前 : php
アーキテクチャー : x86_64
バージョン : 7.2.5
リリース : 1.el7.remi
容量 : 3.2 M
リポジトリー : remi-php72
要約 : PHP scripting language for creating dynamic web sites
URL : http://www.php.net/
ライセンス : PHP and Zend and BSD and MIT and ASL 1.0
説明 : PHP is an HTML-embedded scripting language. PHP attempts to make it
: easy for developers to write dynamically generated web pages. PHP also
: offers built-in database integration for several commercial and
: non-commercial database management systems, so writing a
: database-enabled webpage with PHP is fairly simple. The most common
: use of PHP coding is probably as a replacement for CGI scripts.
:
: The php package contains the module (often referred to as mod_php)
: which adds support for the PHP language to Apache HTTP Server.名前 : php-gd
アーキテクチャー : x86_64
バージョン : 7.2.5
リリース : 1.el7.remi
容量 : 76 k
リポジトリー : remi-php72
要約 : A module for PHP applications for using the gd graphics library
URL : http://www.php.net/
ライセンス : PHP
説明 : The php-gd package contains a dynamic shared object that will add
: support for using the gd graphics library to PHP.

名前 : php-mbstring
アーキテクチャー : x86_64
バージョン : 7.2.5
リリース : 1.el7.remi
容量 : 620 k
リポジトリー : remi-php72
要約 : A module for PHP applications which need multi-byte string handling
URL : http://www.php.net/
ライセンス : PHP and LGPLv2 and BSD and OpenLDAP
説明 : The php-mbstring package contains a dynamic shared object that will add
: support for multi-byte string handling to PHP.

名前 : php-mysqlnd
アーキテクチャー : x86_64
バージョン : 7.2.5
リリース : 1.el7.remi
容量 : 231 k
リポジトリー : remi-php72
要約 : A module for PHP applications that use MySQL databases
URL : http://www.php.net/
ライセンス : PHP
説明 : The php-mysqlnd package contains a dynamic shared object that will add
: MySQL database support to PHP. MySQL is an object-relational database
: management system. PHP is an HTML-embeddable scripting language. If
: you need MySQL support for PHP applications, you will need to install
: this package and the php package.
:
: This package use the MySQL Native Driver

名前 : php-pdo
アーキテクチャー : x86_64
バージョン : 7.2.5
リリース : 1.el7.remi
容量 : 123 k
リポジトリー : remi-php72
要約 : A database access abstraction module for PHP applications
URL : http://www.php.net/
ライセンス : PHP
説明 : The php-pdo package contains a dynamic shared object that will add
: a database access abstraction layer to PHP. This module provides
: a common interface for accessing MySQL, PostgreSQL or other
: databases.

名前 : php-pecl-mcrypt
アーキテクチャー : x86_64
バージョン : 1.0.1
リリース : 4.el7.remi.7.2
容量 : 29 k
リポジトリー : remi-php72
要約 : Bindings for the libmcrypt library
URL : http://pecl.php.net/package/mcrypt
ライセンス : PHP
説明 : Provides bindings for the unmaintained libmcrypt.
:
: Package built for PHP 7.2.

名前 : php-pecl-mysql
アーキテクチャー : x86_64
バージョン : 1.0.0
リリース : 0.17.20160812git230a828.el7.remi.7.2
容量 : 38 k
リポジトリー : remi-php72
要約 : MySQL database access functions
URL : http://pecl.php.net/package/mysql
ライセンス : PHP
説明 : This extension provides the mysql family of functions that were provided
: with PHP 3-5. These functions have been superseded by MySQLi and PDO_MySQL,
: which continue to be bundled with PHP 7.
:
: Although it should be possible to use this extension with PHP 7.0, you are
: strongly encouraged to port your code to use either MySQLi or PDO_MySQL,
: as this extension is not maintained and is available for historical reasons only.
:
: Package built for PHP 7.2.

名前 : php-xml
アーキテクチャー : x86_64
バージョン : 7.2.5
リリース : 1.el7.remi
容量 : 203 k
リポジトリー : remi-php72
要約 : A module for PHP applications which use XML
URL : http://www.php.net/
ライセンス : PHP
説明 : The php-xml package contains dynamic shared objects which add support
: to PHP for manipulating XML documents using the DOM tree,
: and performing XSL transformations on XML documents.

名前 : php-xmlrpc
アーキテクチャー : x86_64
バージョン : 7.2.5
リリース : 1.el7.remi
容量 : 78 k
リポジトリー : remi-php72
要約 : A module for PHP applications which use the XML-RPC protocol
URL : http://www.php.net/
ライセンス : PHP and BSD
説明 : The php-xmlrpc package contains a dynamic shared object that will add
: support for the XML-RPC protocol to PHP.

各パッケージの詳細を確認後、インストールに入ります。

3-2. PHPのインストール

php72パッケージはyumコマンドにinstallオプションを付けることでインストールすることができます。項目3-1. で必要なパッケージの情報が確認できましたので、以下のコマンドでインストールします。

# yum -y install --enablerepo=remi,remi-php72 php php-mbstring php-xml php-xmlrpc php-gd php-pdo php-pecl-mcrypt php-mysqlnd php-pecl-mysql

上記ではyumコマンドに-yオプションを付けることでインストール時の確認応答を省いています。パッケージを複数インストールする場合はスペースを入れてパッケージ名を列記します。コマンドを実行すると、以下のようにインストールが開始されます。

読み込んだプラグイン:fastestmirror
Loading mirror speeds from cached hostfile
* base: ftp.iij.ad.jp
* epel: mirrors.aliyun.com
* extras: ftp.iij.ad.jp
* remi: mirrors.thzhost.com
* remi-php72: mirrors.thzhost.com
* remi-safe: mirrors.thzhost.com
* updates: ftp.iij.ad.jp
依存性の解決をしています
--> トランザクションの確認を実行しています。
---> パッケージ php.x86_64 0:7.2.5-1.el7.remi を インストール
---> パッケージ php-gd.x86_64 0:7.2.5-1.el7.remi を インストール
---> パッケージ php-mbstring.x86_64 0:7.2.5-1.el7.remi を インストール
---> パッケージ php-mysqlnd.x86_64 0:7.2.5-1.el7.remi を インストール
---> パッケージ php-pdo.x86_64 0:7.2.5-1.el7.remi を インストール
---> パッケージ php-pecl-mcrypt.x86_64 0:1.0.1-4.el7.remi.7.2 を インストール
---> パッケージ php-pecl-mysql.x86_64 0:1.0.0-0.17.20160812git230a828.el7.remi.7.2 を インストール
---> パッケージ php-xml.x86_64 0:7.2.5-1.el7.remi を インストール
---> パッケージ php-xmlrpc.x86_64 0:7.2.5-1.el7.remi を インストール
--> トランザクションの確認を実行しています。
---> パッケージ php-cli.x86_64 0:7.2.5-1.el7.remi を インストール
---> パッケージ php-common.x86_64 0:7.2.5-1.el7.remi を インストール
--> トランザクションの確認を実行しています。
---> パッケージ php-json.x86_64 0:7.2.5-1.el7.remi を インストール
--> 依存性解決を終了しました。依存性を解決しました

インストール中:
php x86_64 7.2.5-1.el7.remi remi-php72 3.2 M
php-gd x86_64 7.2.5-1.el7.remi remi-php72 76 k
php-mbstring x86_64 7.2.5-1.el7.remi remi-php72 620 k
php-mysqlnd x86_64 7.2.5-1.el7.remi remi-php72 231 k
php-pdo x86_64 7.2.5-1.el7.remi remi-php72 123 k
php-pecl-mcrypt x86_64 1.0.1-4.el7.remi.7.2 remi-php72 29 k
php-pecl-mysql x86_64 1.0.0-0.17.20160812git230a828.el7.remi.7.2 remi-php72 38 k
php-xml x86_64 7.2.5-1.el7.remi remi-php72 203 k
php-xmlrpc x86_64 7.2.5-1.el7.remi remi-php72 78 k
依存性関連でのインストールをします:
php-cli x86_64 7.2.5-1.el7.remi remi-php72 4.8 M
php-common x86_64 7.2.5-1.el7.remi remi-php72 1.1 M
php-json x86_64 7.2.5-1.el7.remi remi-php72 61 k

トランザクションの要約
インストール 9 パッケージ (+3 個の依存関係のパッケージ)

総ダウンロード容量: 10 M
インストール容量: 43 M
Downloading packages:
(1/12): php-json-7.2.5-1.el7.remi.x86_64.rpm | 61 kB 00:00:00
(2/12): php-mbstring-7.2.5-1.el7.remi.x86_64.rpm | 620 kB 00:00:00
(3/12): php-mysqlnd-7.2.5-1.el7.remi.x86_64.rpm | 231 kB 00:00:00
(4/12): php-7.2.5-1.el7.remi.x86_64.rpm | 3.2 MB 00:00:02
(5/12): php-common-7.2.5-1.el7.remi.x86_64.rpm | 1.1 MB 00:00:02
(6/12): php-pdo-7.2.5-1.el7.remi.x86_64.rpm | 123 kB 00:00:00
(7/12): php-pecl-mcrypt-1.0.1-4.el7.remi.7.2.x86_64.rpm | 29 kB 00:00:00
(8/12): php-xml-7.2.5-1.el7.remi.x86_64.rpm | 203 kB 00:00:00
(9/12): php-xmlrpc-7.2.5-1.el7.remi.x86_64.rpm | 78 kB 00:00:00
(10/12): php-pecl-mysql-1.0.0-0.17.20160812git230a828.el7.remi.7.2.x86_64.rpm | 38 kB 00:00:00
php-gd-7.2.5-1.el7.remi.x86_64 FAILED ====== ] 175 kB/s | 8.3 MB 00:00:12 ETA
(11/12): php-gd-7.2.5-1.el7.remi.x86_64.rpm | 76 kB 00:00:00
(12/12): php-cli-7.2.5-1.el7.remi.x86_64.rpm | 4.8 MB 00:00:44

Running transaction check
Running transaction test
Transaction test succeeded
Running transaction
インストール中 : php-common-7.2.5-1.el7.remi.x86_64 1/12
インストール中 : php-json-7.2.5-1.el7.remi.x86_64 2/12
インストール中 : php-cli-7.2.5-1.el7.remi.x86_64 3/12
インストール中 : php-xml-7.2.5-1.el7.remi.x86_64 4/12
インストール中 : php-pdo-7.2.5-1.el7.remi.x86_64 5/12
インストール中 : php-mysqlnd-7.2.5-1.el7.remi.x86_64 6/12
インストール中 : php-pecl-mysql-1.0.0-0.17.20160812git230a828.el7.remi.7.2.x86_64 7/12
インストール中 : php-xmlrpc-7.2.5-1.el7.remi.x86_64 8/12
インストール中 : php-7.2.5-1.el7.remi.x86_64 9/12
インストール中 : php-gd-7.2.5-1.el7.remi.x86_64 10/12
インストール中 : php-pecl-mcrypt-1.0.1-4.el7.remi.7.2.x86_64 11/12
インストール中 : php-mbstring-7.2.5-1.el7.remi.x86_64 12/12

インストール:
php.x86_64 0:7.2.5-1.el7.remi php-gd.x86_64 0:7.2.5-1.el7.remi
php-mbstring.x86_64 0:7.2.5-1.el7.remi php-mysqlnd.x86_64 0:7.2.5-1.el7.remi
php-pdo.x86_64 0:7.2.5-1.el7.remi php-pecl-mcrypt.x86_64 0:1.0.1-4.el7.remi.7.2
php-pecl-mysql.x86_64 0:1.0.0-0.17.20160812git230a828.el7.remi.7.2 php-xml.x86_64 0:7.2.5-1.el7.remi
php-xmlrpc.x86_64 0:7.2.5-1.el7.remi

依存性関連をインストールしました:
php-cli.x86_64 0:7.2.5-1.el7.remi php-common.x86_64 0:7.2.5-1.el7.remi php-json.x86_64 0:7.2.5-1.el7.remi

完了しました!

エラーの出力がなく”完了しました!”と表示されれば、phpは正常にインストールされています。

3-3. インストールされたPHPパッケージの確認

PHPがインストールされたことを確認します。インストールされているパッケージはyumコマンドで確認できます。以下のようにyumを実行することで、phpパッケージがインストールされていることを確認します。

# yum list installed | grep php

出力結果として、以下のphpパッケージが表示されることを確認します。

php.x86_64 7.2.5-1.el7.remi @remi-php72
php-cli.x86_64 7.2.5-1.el7.remi @remi-php72
php-common.x86_64 7.2.5-1.el7.remi @remi-php72
php-gd.x86_64 7.2.5-1.el7.remi @remi-php72
php-json.x86_64 7.2.5-1.el7.remi @remi-php72
php-mbstring.x86_64 7.2.5-1.el7.remi @remi-php72
php-mysqlnd.x86_64 7.2.5-1.el7.remi @remi-php72
php-pdo.x86_64 7.2.5-1.el7.remi @remi-php72
php-pecl-mcrypt.x86_64 1.0.1-4.el7.remi.7.2 @remi-php72
php-pecl-mysql.x86_64 1.0.0-0.17.20160812git230a828.el7.remi.7.2
@remi-php72
php-xml.x86_64 7.2.5-1.el7.remi @remi-php72
php-xmlrpc.x86_64 7.2.5-1.el7.remi @remi-php72

上記のパッケージが表示されれば、phpのパッケージ確認は完了です。

3-4. php72 cliの動作確認

phpはcliから動作させることも可能です。phpコマンドを使ってバージョンを確認してみます。

$ php -v
PHP 7.2.5 (cli) (built: Apr 24 2018 18:14:01) ( NTS )
Copyright (c) 1997-2018 The PHP Group
Zend Engine v3.2.0, Copyright (c) 1998-2018 Zend Technologies

正常に7.2系のバージョンが表示されました。

4. PHPの基本的な設定

項目3. の手順までで、PHP7.2系パッケージの導入とモジュールの設定までが完了しました。phpの場合、この状態でも動作しますが、基本的な設定を行うことをお勧めします、本記事では運用するにあたって最低限、必要になる設定を行います。設定の前提は以下の通りです。

  • 最低限のセキュリティ設定
  • アップロードサイズの変更(2Mから20MBへ)
  • タイムゾーンの設定
  • マルチバイト対応(日本語対応)

この条件に合わせて設定を行っていきます。

4-1. php.iniの変更

PHPの設定は/etc/以下にあるphp.iniファイルで行います。php.iniの設定変更前に、既存のファイルをバックアップしておきます。具体的には以下の手順でコピーを行います。

# cp -p /etc/php.ini /etc/php.ini.org

バックアップの完了後、エディタで設定ファイルを開いて変更を行います。本環境ではOSの標準的なエディタである、viエディタを利用しています。

# vi /etc/php.ini

4-1-1. PHPのセキュリティ設定

PHPはデフォルトの設定ではhttpヘッダーにバージョンを表示します。バージョンは公開しないほうがセキュアになりますので、phpのバージョンを非表示にする設定を行います。374行目にある

expose_php = On

expose_php = Off

に変更します。

4-1-2. アップロードサイズの変更

PHPのデフォルト設定ではアップロードできるファイルのサイズが2MBだと少ないため、20Mに変更します。
まずはPOST データの最大サイズを設定するpost_max_sizeを変更します。デフォルトでは8Mですが、これを20Mに変更します。
672行目にある

post_max_size = 8M

post_max_size = 20M

に変更します。

post_max_sizeの変更だけでは、ファイルのアップロード容量を増やせないため、併せてupload_max_filesizeを変更します。
825行目にある

upload_max_filesize = 2M

upload_max_filesize = 20M

に変更します。

4-1-3. タイムゾーンの設定

タイムゾーンの設定を行います。これを設定しないとエラーが大量に出力されます。勿論、アプリケーションが時間を扱う時にも運用環境に合わせて設定が行われていないと問題になります。日本の場合は”Asia/Tokyo”になりますので、これをdate.timezoneとして設定を行います。
902行目

;date.timezone =

date.timezone = "Asia/Tokyo"

に変更します。

4-1-4. マルチバイト対応(日本語対応)設定

以下の項目は日本語を利用するうえでの設定変更になります。一般的な設定を紹介していますが、日本語の扱いは運用環境によって異なると思います。動作するアプリケーションに応じて、適宜、変更してください。
まずはmbstringで使用される言語のデフォルト値を定義するmbstring.languageを設定します。
1509行目のパラメーター

;mbstring.language = Japanese

mbstring.language = Japanese

に変更します。

続いて内部文字エンコーディングのデフォルト値を定義するmbstring.internal_encodingを設定します。ここではOSに合わせてUTF-8を指定しています。
1516行目のパラメーター

;mbstring.internal_encoding =

mbstring.internal_encoding = UTF-8

に変更します。

HTTP通信の時のインプット文字コードを指定するmbstring.http_inputを設定します。ここではUTF-8を指定しています。
1524行目のパラメーター

;mbstring.http_input =

mbstring.http_input = UTF-8

に変更します。

HTTP 出力文字コードを指定するmbstring.http_outputを設定します。ここではpassを指定して自動変換を行わないようにします。
1534行目のパラメーター

;mbstring.http_output =

mbstring.http_output = pass

に変更します。

HTTP 入力変換を有効にするmbstring.encoding_translationをOnにします。文字化けが発生した場合はOffにします。
1542行目のパラメーター

;mbstring.encoding_translation = Off

mbstring.encoding_translation = On

に変更します。

文字コード自動検出の優先順位を定義するパラメーターであるmbstring.detect_orderを設定します。autoの場合、UTF-8が最初に選択されるため、ここはautoで問題ないかと思います。コメントである”;”を削除します。
1547行目のパラメーター

;mbstring.detect_order = auto

mbstring.detect_order = auto

に変更します。

コードとして変換できない文字がある場合に、代替の文字を出力しないようmbstring.substitute_characterを設定します。コメントである”;”を削除します。
1552行目のパラメーター

;mbstring.substitute_character = none

mbstring.substitute_character = none

に変更します。
以上でphp.iniの設定変更は完了です。変更したファイルを保存します。

スポンサーリンク

5. php.ini設定ファイルの反映とhttpdの確認

ここまででphpの基本的な設定は完了しました。変更した設定を反映するためにhttpd(apache)を再起動します。systemctlを以下のように実行します。

# systemctl restart httpd

エラーが出力されなければ、httpdは正常に再起動しています。
再起動後にhttpdのstatusを確認します。

# systemctl status httpd
● httpd.service - The Apache HTTP Server
Loaded: loaded (/usr/lib/systemd/system/httpd.service; enabled; vendor preset: disabled)
Active: active (running) since 月 2018-05-14 18:00:16 JST; 5s ago
Docs: man:httpd(8)
man:apachectl(8)
Process: 12352 ExecStop=/bin/kill -WINCH ${MAINPID} (code=exited, status=0/SUCCESS)
Process: 1488 ExecReload=/usr/sbin/httpd $OPTIONS -k graceful (code=exited, status=0/SUCCESS)
Main PID: 12355 (httpd)
Status: "Processing requests..."
CGroup: /system.slice/httpd.service
tq12355 /usr/sbin/httpd -DFOREGROUND
tq12356 /usr/sbin/httpd -DFOREGROUND
tq12357 /usr/sbin/httpd -DFOREGROUND
tq12358 /usr/sbin/httpd -DFOREGROUND
tq12359 /usr/sbin/httpd -DFOREGROUND
mq12360 /usr/sbin/httpd -DFOREGROUND

上記の出力結果から、httpdは正常に再起動していることが確認できます。
併せてhttpd側にphpがモジュールとして組み込まれていることを確認します。確認はhttpdコマンドに-Mを付けて実行します。

# httpd -M | grep php
php7_module (shared)

結果としてphp7_moduleが表示されれば、確認は完了です。

6. 動作確認

項目7. まででPHPの設定が完了しましたので、ここからは実際にCLIからのテストと、ブラウザでサイトへ接続して、正常にPHPが動作していることを確認していきます。利用しているブラウザはGoogle Chromeになります。

6-1. CLIでのphp確認

コマンドライン(CLI)からphpコマンドを利用してPHPの動作を確認することができます。phpコマンドを以下のように実行します。

# php -r 'phpinfo();'

実行結果は以下のようになります。(出力される量が多いので一部のみを除いて、割愛しています。)

phpinfo()
PHP Version => 7.2.5System => Linux www.rem-system.co.jp 3.10.0-862.el7.x86_64 #1 SMP Fri Apr 20 16:44:24 UTC 2018 x86_64
Build Date => Apr 24 2018 19:11:43
Server API => Command Line Interface
Virtual Directory Support => disabled
Configuration File (php.ini) Path => /etc
Loaded Configuration File => /etc/php.ini
Scan this dir for additional .ini files => /etc/php.d
Additional .ini files parsed => /etc/php.d/20-bz2.ini,
/etc/php.d/20-calendar.ini,
/etc/php.d/20-ctype.ini,
/etc/php.d/20-curl.ini,
/etc/php.d/20-dom.ini,
/etc/php.d/20-exif.ini,
/etc/php.d/20-fileinfo.ini,
/etc/php.d/20-ftp.ini,
/etc/php.d/20-gd.ini,
/etc/php.d/20-gettext.ini,
/etc/php.d/20-iconv.ini,
/etc/php.d/20-json.ini,
/etc/php.d/20-mbstring.ini,

【略】

PHP License
This program is free software; you can redistribute it and/or modify
it under the terms of the PHP License as published by the PHP Group
and included in the distribution in the file: LICENSE

This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

If you did not receive a copy of the PHP license, or have any
questions about PHP licensing, please contact license@php.net.

以上のようにphpの設定情報が表示されれば、phpは正常に動作しています。

6-2. ブラウザでのphp確認

ブラウザからも動作を確認しておきます。設定したApache httpdのドキュメントルートに動作確認用のファイルを作成して、ブラウザからアクセスを行います。

6-2-1. 動作確認用のファイルを作成

動作確認用のファイルを作成します。ここではドキュメントルートとして/home/www/htmlが設定されている前提です。
ディレクトリを移動します。

# cd /home/www/html
# ls
index.html

viコマンドでindex.phpというファイル名を作成します。

# vi index.php

ファイルの内容は以下になります。

変更後にファイルを保存してください。これで動作確認用ファイルの作成は完了です。

6-2-2. ブラウザからアクセスする

ブラウザからphpinfoの画面が表示できることを確認します。
サイトがあるホスト名がwww.testdom.comの場合は以下のようにブラウザに入力します。

https://www.testdom.com/index.php

正常に設定ができている場合、以下のようなphpの情報が画面に表示されます。

centos-php72-inst-6-2-2-02

これでPHPの動作確認は完了です。作成したindex.phpファイルはセキュリティホールになりますので、削除しておきます。

スポンサーリンク

7. まとめ

ここまででApache httpdとPHPの導入が完了しました。この状態でPHPプログラムは動作しますので、PHPの入門にも利用できます。WordPressなどのCMSを動作させるためには、別途データベースが必要になります。オープンソースの代表的なデータベースであるMariaDBを導入する手順については記事

で紹介しています。まずは本環境でPHPでプログラムを作成して、PHPに慣れることをお勧めします。その後にデータベースを導入してLAMP環境を作成してみては如何でしょうか。

エンジニアへのご相談

システムの新規導入や入れ替えに

記事をお読みいただいてシステムの新規導入や入れ替えを相談したい、また記事中のインストールや設定がうまくいかない場合のお問い合わせはフォームからご連絡下さい。レムシステムではオープンソースを含むシステムを導入した実績が豊富にあります。課題解決から導入、サポートまでレムシステムにお任せ下さい。

お問い合わせをいただいた先への営業活動などは行なっておりませんので、疑問点や不安な部分については、お気軽にお問い合わせください。

エンジニアへのご相談

  • この記事を書いた人
  • 最新記事

小村定

SIerでIT系インフラの設計と構築を経験したのちに独立、「レムシステム株式会社」を設立する。インフラ系エンジニア歴20年の経験を活かしてITに関わる課題解決や効率化に取り組む日々を送っている。

Copyright© レムシステム エンジニアブログ , 2019 All Rights Reserved.