CentOS 7にPHP 7.3をインストールしてApache HTTP Serverと連携させる方法

centos-httpd-php73-top

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

以前のブログ記事でCentOS上にSSL対応したApache httpdの環境を作成してPHP7.2をインストールする手順を紹介しました。

Open Source
centos7-php72-inst-top
CentOS 7のApache環境にPHP7.2をインストールして基本的な設定を行う

こんにちは、ITエンジニアの小村(@system_kom)です。 以前の記事でCentOSにApache httpdのインストールとSSLを設定する手順を紹介しました。 今回はその続きとして、記事内で構築した環境へPHPをインストールしてテ ...

2018年5月当時に書かれた、前回の記事からPHPの安定バージョンは7.2系から7.3系にアップデートされています。今回の記事では2019年6月現在でのPHP安定バージョンである7.3系の導入手順を紹介してみたいと思います。

1. PHP 7.3を導入する環境

PHP 7.3を導入するOSとウェブサーバーの環境は以前の記事

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

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

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

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

ウェブサーバーとして利用しているApache httpdはCentOSのBaseレポジトリからインストールしているものになります。この環境を前提にPHPの導入と設定を進めていきます。

2. PHP導入の前提条件

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

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

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

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

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

  • 5.4系(CentOSのベースに登録されているもの、OSのサポート期間に準ずる)
  • 7.1系(7系の前バージョン、サポート期間が2019年12月まで)
  • 7.2系(7系の前バージョン、サポート期間が2020年12月まで)
  • 7.3系(最新の安定バージョン、サポート期間が2021年12月まで)

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

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

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

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

PHP 7.3系をインストールする前にCentOSのBaseレポジトリからインストールされたPHP 5.4系がないことを確認します。PHP5.4系がインストールされていると、設定ファイルやモジュールの読み込み時に混乱する可能性があります。以下のコマンドでPHPがインストールされていないことを確認します。

 command
$ yum list installed | grep php

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

 command
# yum remove php*

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

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

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

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

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

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

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

以下が実行結果です。(表示内容は一部、割愛しています)

 log
--> 依存性の処理をしています: epel-release = 7 のパッケージ: remi-release-7.6-2.el7.remi.noarch
Loading mirror speeds from cached hostfile
* base: ftp-srv2.kddilabs.jp
* extras: ftp-srv2.kddilabs.jp
インストール中:
remi-release noarch 7.6-2.el7.remi /remi-release-7 19 k
依存性関連でのインをします:
epel-release noarch 7-11 extras 15 kトランザクションの要約
インストール 1 パッケージ (+1 個の依存関係のパッケージ)合計容量: 34 k
総ダウンロード容量: 15 k
インストール容量: 43 k
Running transaction
インストール中 : epel-release-7-11.noarch 1/2
インストール中 : remi-release-7.6-2.el7.remi.noarch 2/2
検証中 : remi-release-7.6-2.el7.remi.noarch 1/2
検証中 : epel-release-7-11.noarch 2/2インストール:
remi-release.noarch 0:7.6-2.el7.remi依存性関連をインストールしました:
epel-release.noarch 0:7-11
完了しました!

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

 log
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-glpi91.repo
remi-glpi92.repo
remi-glpi93.repo
remi-glpi94.repo
remi-modular.repo
remi-php54.repo
remi-php70.repo
remi-php71.repo
remi-php72.repo
remi-php73.repo
remi-safe.repo
remi.repo

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

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

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

 command
$ yum info --enablerepo=remi,remi-php73 php

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

 log
読み込んだプラグイン:fastestmirror, langpacks
Loading mirror speeds from cached hostfile
* base: ftp-srv2.kddilabs.jp
* epel: ftp.riken.jp
* extras: ftp-srv2.kddilabs.jp
* remi: ftp.riken.jp
* remi-php73: ftp.riken.jp
* remi-safe: ftp.riken.jp
* updates: ftp-srv2.kddilabs.jp
remi | 3.0 kB 00:00:00
remi-php73 | 3.0 kB 00:00:00
(1/2): remi-php73/primary_db | 199 kB 00:00:00
(2/2): remi/primary_db | 2.5 MB 00:00:00
利用可能なパッケージ
名前 : php
アーキテクチャー : x86_64
バージョン : 7.3.6
リリース : 3.el7.remi
容量 : 3.2 M
リポジトリー : remi-php73
要約 : PHP scripting language for creating dynamic web sites
URL : http://www.php.net/
ライセンス : PHP and Zend and BSD and MIT and ASL 1.0 and NCSA
説明 : 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.3系のパッケージについて詳細が表示されます。remiレポジトリを有効にするオプションを付与して再度、"yum search"コマンドでPHPのパッケージを探してみます。

 command
$ yum search --enablerepo=remi,remi-php73 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
【略】
php73-php-phpiredis.x86_64 : Client extension for Redis
php73-php-pinba.x86_64 : Client extension for Pinba statistics server
php73-php-sodium.x86_64 : Wrapper for the Sodium cryptographic library
php73-php-wkhtmltox.x86_64 : HTML ConverterName and summary matches only, use "search all" for everything.

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

  • php.x86_64 : Package that installs PHP 7.3
  • 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パッケージをインストール対象とします。

4. PHP 7.3系パッケージのインストール

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

4-1. PHPパッケージの情報確認

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

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

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

 log
読み込んだプラグイン:fastestmirror, langpacks
Loading mirror speeds from cached hostfile
* base: ftp.riken.jp
* epel: ftp.riken.jp
* extras: ftp.riken.jp
* remi: ftp.riken.jp
* remi-php73: ftp.riken.jp
* remi-safe: ftp.riken.jp
* updates: ftp.riken.jp
利用可能なパッケージ
名前 : php
アーキテクチャー : x86_64
バージョン : 7.3.6
リリース : 3.el7.remi
容量 : 3.2 M
リポジトリー : remi-php73
要約 : PHP scripting language for creating dynamic web sites
URL : http://www.php.net/
ライセンス : PHP and Zend and BSD and MIT and ASL 1.0 and NCSA
説明 : 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.3.6
リリース : 3.el7.remi
容量 : 79 k
リポジトリー : remi-php73
要約 : 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.3.6
リリース : 3.el7.remi
容量 : 509 k
リポジトリー : remi-php73
要約 : 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.3.6
リリース : 3.el7.remi
容量 : 232 k
リポジトリー : remi-php73
要約 : 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.3.6
リリース : 3.el7.remi
容量 : 125 k
リポジトリー : remi-php73
要約 : 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.2
リリース : 2.el7.remi.7.3
容量 : 29 k
リポジトリー : remi-php73
要約 : Bindings for the libmcrypt library
URL : http://pecl.php.net/package/mcrypt
ライセンス : PHP
説明 : Provides bindings for the unmaintained libmcrypt.
:
: Package built for PHP 7.3.名前 : php-pecl-mysql
アーキテクチャー : x86_64
バージョン : 1.0.0
リリース : 0.20.20180226.647c933.el7.remi.7.3
容量 : 38 k
リポジトリー : remi-php73
要約 : 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.3.名前 : php-xml
アーキテクチャー : x86_64
バージョン : 7.3.6
リリース : 3.el7.remi
容量 : 206 k
リポジトリー : remi-php73
要約 : 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.3.6
リリース : 3.el7.remi
容量 : 82 k
リポジトリー : remi-php73
要約 : 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.

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

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

PHP 7.3系のパッケージは"yum install"コマンドでインストールすることができます。項目4-1. で必要なパッケージの情報が確認できましたので、以下のコマンドでインストールします。

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

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

 log
読み込んだプラグイン:fastestmirror, langpacks
Loading mirror speeds from cached hostfile
* base: ftp-srv2.kddilabs.jp
* epel: ftp.riken.jp
* extras: ftp-srv2.kddilabs.jp
* remi: ftp.riken.jp
* remi-php73: ftp.riken.jp
* remi-safe: ftp.riken.jp
* updates: ftp-srv2.kddilabs.jp
依存性の解決をしています
--> トランザクションの確認を実行しています。
---> パッケージ php.x86_64 0:7.3.6-3.el7.remi を インストール
【中略】
インストール中:
php x86_64 7.3.6-3.el7.remi remi-php73 3.2 M
php-gd x86_64 7.3.6-3.el7.remi remi-php73 79 k
php-mbstring x86_64 7.3.6-3.el7.remi remi-php73 509 k
php-mysqlnd x86_64 7.3.6-3.el7.remi remi-php73 232 k
php-pdo x86_64 7.3.6-3.el7.remi remi-php73 125 k
php-pecl-mcrypt x86_64 1.0.2-2.el7.remi.7.3 remi-php73 29 k
php-pecl-mysql x86_64 1.0.0-0.20.20180 remi-php73 38 k
php-xml x86_64 7.3.6-3.el7.remi remi-php73 206 k
php-xmlrpc x86_64 7.3.6-3.el7.remi remi-php73 82 k総ダウンロード容量: 13 M
インストール容量: 50 M
Downloading packages:
(1/22): dejavu-fonts-common-2.33-6.el7.noarch.rpm | 64 kB 00:00:00
(2/22): fontconfig-2.13.0-4.3.el7.x86_64.rpm | 254 kB 00:00:00
(3/22): fontpackages-filesystem-1.44-8.el7.noarch.rpm | 9.9 kB 00:00:00
(4/22): dejavu-sans-fonts-2.33-6.el7.noarch.rpm | 1.4 MB 00:00:00
0
(20/22): php-xml-7.3.6-3.el7.remi.x86_64.rpm | 206 kB 00:00:00
(21/22): php-xmlrpc-7.3.6-3.el7.remi.x86_64.rpm | 82 kB 00:00:00
(22/22): php-pecl-mysql-1.0.0-0.20.20180226.647c933.el7.remi.7.3.x8 | 38 kB 00:00:00
-------------------------------------------------------------------------------------
合計 7.0 MB/s | 13 MB 00:00:01
file:///etc/pki/rpm-gpg/RPM-GPG-KEY-remi から鍵を取得中です。
Importing GPG key 0x00F97F56:
Userid : "Remi Collet <RPMS@FamilleCollet.com>"
Fingerprint: 1ee0 4cce 88a4 ae4a a29a 5df5 004e 6f47 00f9 7f56
Package : remi-release-7.6-2.el7.remi.noarch (installed)
From : /etc/pki/rpm-gpg/RPM-GPG-KEY-remi
file:///etc/pki/rpm-gpg/RPM-GPG-KEY-EPEL-7 から鍵を取得中です。
検証中 : libwebp7-1.0.2-1.el7.remi.x86_64 16/22
検証中 : php-gd-7.3.6-3.el7.remi.x86_64 17/22
検証中 : php-7.3.6-3.el7.remi.x86_64 18/22
検証中 : php-pecl-mcrypt-1.0.2-2.el7.remi.7.3.x86_64 19/22
検証中 : php-xml-7.3.6-3.el7.remi.x86_64 20/22
検証中 : oniguruma5-6.9.2-1.el7.remi.x86_64 21/22
検証中 : php-mbstring-7.3.6-3.el7.remi.x86_64 22/22インストール:
php.x86_64 0:7.3.6-3.el7.remi php-gd.x86_64 0:7.3.6-3.el7.remi
php-mbstring.x86_64 0:7.3.6-3.el7.remi php-mysqlnd.x86_64 0:7.3.6-3.el7.remi
php-pdo.x86_64 0:7.3.6-3.el7.remi php-pecl-mcrypt.x86_64 0:1.0.2-2.el7.remi.7.3
php-pecl-mysql.x86_64 0:1.0.0-0.20.20180226.647 php-xml.x86_64 0:7.3.6-3.el7.remi
php-xmlrpc.x86_64 0:7.3.6-3.el7.remi依存性関連をインストールしました:
dejavu-fonts-common.noarch 0:2.33-6.el7 dejavu-sans-fonts.noarch 0:2.33-6.el7
fontconfig.x86_64 0:2.13.0-4.3.el7 fontpackages-filesystem.noarch 0:1.44-8.el7
gd-last.x86_64 0:2.2.5-8.el7.remi libXpm.x86_64 0:3.5.12-1.el7
libargon2.x86_64 0:20161029-3.el7 libmcrypt.x86_64 0:2.5.8-13.el7
libwebp7.x86_64 0:1.0.2-1.el7.remi oniguruma5.x86_64 0:6.9.2-1.el7.remi
php-cli.x86_64 0:7.3.6-3.el7.remi php-common.x86_64 0:7.3.6-3.el7.remi
php-json.x86_64 0:7.3.6-3.el7.remi
完了しました!

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

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

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

 command
$ yum list installed | grep php

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

 log
php.x86_64 7.3.6-3.el7.remi @remi-php73
php-cli.x86_64 7.3.6-3.el7.remi @remi-php73
php-common.x86_64 7.3.6-3.el7.remi @remi-php73
php-gd.x86_64 7.3.6-3.el7.remi @remi-php73
php-json.x86_64 7.3.6-3.el7.remi @remi-php73
php-mbstring.x86_64 7.3.6-3.el7.remi @remi-php73
php-mysqlnd.x86_64 7.3.6-3.el7.remi @remi-php73
php-pdo.x86_64 7.3.6-3.el7.remi @remi-php73
php-pecl-mcrypt.x86_64 1.0.2-2.el7.remi.7.3 @remi-php73
php-pecl-mysql.x86_64 1.0.0-0.20.20180226.647c933.el7.remi.7.3
@remi-php73
php-xml.x86_64 7.3.6-3.el7.remi @remi-php73
php-xmlrpc.x86_64 7.3.6-3.el7.remi @remi-php73

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

4-4. PHP 7.3 cliの動作確認

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

 command
$ php -v
PHP 7.3.6 (cli) (built: May 28 2019 09:32:59) ( NTS )
Copyright (c) 1997-2018 The PHP Group
Zend Engine v3.3.6, Copyright (c) 1998-2018 Zend Technologies

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

5. PHPの基本的な設定

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

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

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

5-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

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

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

 code
expose_php = On

 code
expose_php = Off

に変更します。

5-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

に変更します。

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

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

;date.timezone =

date.timezone = "Asia/Tokyo"

に変更します。

5-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の設定変更は完了です。変更したファイルを保存します。

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

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

# systemctl restart httpd

エラーが出力されなければ、httpdは正常に再起動しています。再起動後に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 月 2019-07-01 17:10:15 JST; 7s ago
Docs: man:httpd(8)
man:apachectl(8)
Process: 7988 ExecStop=/bin/kill -WINCH ${MAINPID} (code=exited, status=0/SUCCESS)
Main PID: 7991 (httpd)
Status: "Processing requests..."
CGroup: /system.slice/httpd.service
tq7994 /usr/sbin/httpd -DFOREGROUND
tq7995 /usr/sbin/httpd -DFOREGROUND
tq7996 /usr/sbin/httpd -DFOREGROUND
mq7997 /usr/sbin/httpd -DFOREGROUND

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

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

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

7. 動作確認

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

7-1. CLIでのPHP動作確認

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

 command
$ php -r 'phpinfo();'

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

 command
phpinfo()
PHP Version => 7.3.6System => Linux www 3.10.0-957.21.3.el7.x86_64 #1 SMP Tue Jun 18 16:35:19 UTC 2019 x86_64
Build Date => May 28 2019 09:32:59
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,
【割愛】
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は正常に動作しています。

7-2. ブラウザでのPHP動作確認

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

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

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

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

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

 command
# vi index.php

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

 code
<?php phpinfo(); ?>

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

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

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

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

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

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

8. まとめ

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

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

Open Source
centos-mariadb-install
MySQL互換のオープンソースDB MariaDB 10をインストールして利用する

こんにちは、レムシステム株式会社 ITインフラ担当の小村(@system_kom)です。 前回の記事でウェブサーバーであるhttpdとアプリケーションサーバーであるphpのインストールが完了しました。 今回は作成した環境にデータベースとして ...

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

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

レムシステム

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

-Apache, CentOS, PHP
-