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

centos7-php72-inst-top

こんにちは、ITエンジニアの小村(@system_kom)です。

以前の記事でCentOSにApache httpdのインストールとSSLを設定する手順を紹介しました。
今回はその続きとして、記事内で構築した環境へPHPをインストールしてテスト用のページが表示できるところまでの手順を紹介します。

参考 Apache httpdのインストールとSSLの設定を紹介した記事

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

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

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

こんにちは、レムシステム株式会社 ITインフラ担当の小村(@system_kom)です。 2018年7月からGoogleのウェブブラウザ「Chrome」の仕様変更により、HTTPS化されていないウェブサイトには「保護されていません」と表示さ ...

昨今のウェブサイトは静的なHTMLではなく、ユーザーの要求に応えて動的にHTMLを生成する「アプリケーションサーバー」で作成されていることが殆どです。

このアプリケーションサーバーとしてオープンソースで代表的なものがPHPです。

PHPで記述されたアプリケーションはWordPressEC-CUBE等、現在のウェブサイトを構成する上で欠かせないものばかりになります。

是非、本記事を参考にPHPを導入してみて下さい。

1. PHP導入の前提条件

PHP 7.2を導入する環境は以前の記事で紹介していますが、基本的な環境について改めて記載しておきます。

PHP7.2をインストールする環境

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

Cent OSのバージョンは2018年5月現在で、最新のCentOS 7.5を利用します。利用しているCentOSのバージョンは以下のように確認できます。

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

利用しているApache httpdのバージョンは以下のコマンドで確認できます。

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

PHP7.2のインストールを行う前に利用しているの環境を確認することをオススメします。
インストールする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系がインストールされていると、設定ファイルやモジュールの読み込み時に混乱する可能性があります。以下のコマンドでPHP5.4系がインストールされていないことを確認します。

 command
$ yum list installed | grep php

PHPパッケージが表示されないことが確認できれば問題はありません。
もし出力結果にPHPパッケージが含まれている場合はパッケージを削除するコマンド"yum remove"を以下のように実行してPHP5.4系のパッケージを削除して下さい。

 command
# yum remove php*

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

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

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

remiレポジトリはEPELの補完的な立ち位置の外部リポジトリです。有志によって管理されているプロジェクトになります。
remiの目的ですが、最新バージョンのPHPモジュールをRHEL系のディストリビューションに提供することです。

このレポジトリをインストールします。なお、remiのリポジトリを追加するには、EPELリポジトリが追加されている必要があります。
EPELレポジトリはHTTPSを設定する際に追加済みなので、ここでは手順を割愛しています。

epelレポジトリがインストールされていなくても、yumコマンドの依存関係でremiレポジトリをインストールする際にepelレポジトリもインストールされます。

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

 command
# 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/以下に含まれています。以下が追加後のディレクトリ一覧になります。

CentOS-Base.repo
CentOS-CR.repo
CentOS-Debuginfo.repo
CentOS-Media.repo
CentOS-Sources.repo
CentOS-Vault.repo
CentOS-fasttrack.repo
epel-testing.repo
epel.repo
remi-php54.repo
remi-php70.repo
remi-php71.repo
remi-php72.repo
remi-safe.repo
remi.repo

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

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

remiレポジトリでPHP7.2系の導入に利用するレポジトリはremi-php72レポジトリになります。
remi-php72レポジトリはデフォルトでは有効になっていません。それ程、使用頻度も高くないことからphp7.2系に関連したyumコマンドを実行する際だけ有効にするようにします。

この場合はyumコマンドにオプションである"--enable-repo=remi,remi-php72"を付与します。例えばPHPパッケージを探す場合は以下のように実行します。

 command
$ 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のパッケージを探してみます。

 command
$ 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系を含むパッケージが表示されることが確認できました。この中で必要になるものは以下のパッケージになります。
先ずはPHPを利用するうえで基本となるパッケージとして以下が必要となります。

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(Mariadb)を利用する前提となります。PostgreSQLなど、MySQL系以外のデータベースを利用する場合には別のパッケージが必要になります。

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パッケージのインストール前に、パッケージの情報を確認しておきます。

 command
$ 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

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

 log
読み込んだプラグイン: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. で必要なパッケージの情報が確認できましたので、以下のように実行してパッケージをインストールします。

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

 log
読み込んだプラグイン:fastestmirror
Loading mirror speeds from cached hostfile
* remi: mirrors.thzhost.com
* remi-php72: mirrors.thzhost.com
* remi-safe: mirrors.thzhost.com
依存性の解決をしています
--> トランザクションの確認を実行しています。
---> パッケージ 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 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
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パッケージがインストールされていることを確認します。

 command
# yum list installed | grep 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コマンドを使ってバージョンを確認してみます。

 command
$ 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の場合、この状態でも動作しますが、基本的な設定を行うことをお勧めします、本記事では運用するにあたって最低限、必要になる設定を行います。設定の前提は以下の通りです。

PHP 設定の前提

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

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

4-1. php.iniの変更

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

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

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

 command
# vi /etc/php.ini

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

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

 code
expose_php = On

 code
expose_php = Off

に変更します。

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

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

 code
post_max_size = 8M

 code
post_max_size = 20M

に変更します。

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

 code
upload_max_filesize = 2M

 code
upload_max_filesize = 20M

に変更します。

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

タイムゾーンの設定を行います。これを設定しないとエラーが大量に出力されます。

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

 code
;date.timezone =

 code
date.timezone = "Asia/Tokyo"

に変更します。

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

以下の項目は日本語を利用するうえでの設定変更になります。
一般的な設定を紹介していますが、日本語の扱いは運用環境によって異なると思います。

動作するアプリケーションに応じて、適宜、変更してください。
まずはmbstringで使用される言語のデフォルト値を定義するmbstring.languageを設定します。
1509行目のパラメーター

 code
;mbstring.language = Japanese

 code
mbstring.language = Japanese

に変更します。

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

 code
;mbstring.internal_encoding =

 code
mbstring.internal_encoding = UTF-8

に変更します。

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

 code
;mbstring.http_input =

 code
mbstring.http_input = UTF-8

に変更します。

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

 code
;mbstring.http_output =

 code
mbstring.http_output = pass

に変更します。

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

 code
;mbstring.encoding_translation = Off

 code
mbstring.encoding_translation = On

に変更します。

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

 code
;mbstring.detect_order = auto

 code
mbstring.detect_order = auto

に変更します。

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

 code
;mbstring.substitute_character = none

 code
mbstring.substitute_character = none

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

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

ここまででPHPの基本的な設定は完了しました。変更した設定を反映するためにApache httpdを再起動します。systemctlコマンドを以下のように実行します。

 command
# systemctl restart httpd

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

 command
$ 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

上記の出力結果から、Apache httpdは正常に再起動していることが確認できます。
あわせてApache httpdにインストールしたPHPがモジュールとして組み込まれていることを確認します。確認はhttpdコマンドに"-M"オプションを付けて実行します。

 command
# httpd -M | grep php
php7_module (shared)

「php7_module」が表示されれば、確認は完了です。

6. 動作確認

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

6-1. CLIでのphp確認

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

 command
# php -r 'phpinfo();'

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

 log
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動作確認

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

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

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

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

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

 command
# vi index.php

index.phpファイルの内容は以下のようにしました。

 command
<?php phpinfo(); ?>

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

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

ブラウザからインストールしたPHPの情報を表示する「phpinfo」が動作することを確認します。サーバーのホスト名が「www.testdom.com」の場合は以下のようにブラウザに入力します。

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

PHPが正しくインストールされて、設定ができている場合、以下のようなPHPの情報が画面に表示されます。

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

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

7. まとめ

ここまででApache httpdとPHPの導入が完了しました。

この状態でPHPプログラムは動作しますので、PHPの入門にも利用できます。WordPressなどのCMSを動作させるためには、別途データベースが必要になります。

オープンソースの代表的なデータベースであるMariaDBを導入する手順については記事

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

[st_af name="codecamp-kiji-sita"]

  • この記事を書いた人
rem-profile-photo

レムシステム

レムシステムはPC・サーバー・ネットワークでの業務効率化を主な業務としている会社です。全国に対応しています。

-CentOS, PHP
-