PHPのインストール (PHP7.2
CentOS 7 の標準リポジトリに含まれるPHPのバージョンは古いものが入っている(CentOS 7.6.1818 でphp5.4系)。また、PHPの修正版がリリースされてもCentOS 7 標準リポジトリのパッケージに反映されるタイミングがやや遅い傾向がある。
PHPの最新の機能を適用したい、最新の修正版を早く適用したいよいう要件がある場合、下記の手順により標準リポジトリではなく別のリポジトリからPHPを導入することができる。
今回はremiリポジトリを使ってPHPをインストールする。
epel & remiリポジトリの導入
最新版のPHPをインストールするために必要なremiリポジトリと、remiリポジトリを使うために必要なepelリポジトリをインストールする。
remiを導入する際には、下記サイト(Remi's RPM repository - Configuration wizard)を利用することをお勧めする。設問に答えることによって必要なコマンドラインを参照することができる。
Remi's RPM repository - Configuration wizard
リポジトリのインストール
CentOS 7 にPHP7.2を単体バージョンでインストールする場合は以下のコマンドでインストールできる。
# yum install https://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm
# yum install http://rpms.remirepo.net/enterprise/remi-release-7.rpm
PHP7.2のリポジトリの有効化
remiリポジトリを導入直後の初期状態では全てのPHPバージョンが無効の状態。これを必要なPHPバージョンのみ有効に設定する。
# yum repolist all | grep php
remi-php54 Remi's PHP 5.4 RPM repository fo 無効
remi-php55 Remi's PHP 5.5 RPM repository fo 無効
remi-php55-debuginfo/x86_64 Remi's PHP 5.5 RPM repository fo 無効
:
remi-php71 Remi's PHP 7.1 RPM repository fo 無効
remi-php71-debuginfo/x86_64 Remi's PHP 7.1 RPM repository fo 無効
remi-php71-test Remi's PHP 7.1 test RPM reposito 無効
remi-php71-test-debuginfo/x86_64 Remi's PHP 7.1 test RPM reposito 無効
remi-php72 Remi's PHP 7.2 RPM repository fo 無効
remi-php72-debuginfo/x86_64 Remi's PHP 7.2 RPM repository fo 無効
remi-php72-test Remi's PHP 7.2 test RPM reposito 無効
remi-php72-test-debuginfo/x86_64 Remi's PHP 7.2 test RPM reposito 無効
remi-php73 Remi's PHP 7.3 RPM repository fo 無効
remi-php73-debuginfo/x86_64 Remi's PHP 7.3 RPM repository fo 無効
remi-php73-test Remi's PHP 7.3 test RPM reposito 無効
remi-php73-test-debuginfo/x86_64 Remi's PHP 7.3 test RPM reposito 無効
「/etc/yum.repos.d/」ディレクトリにある「remi-phpNN.repo」(NNはPHPのバージョン)ファイルを編集して必要なPHPのバージョンのremiリポジトリを有効にする。
以下の例ではPHPバージョン7.2を使うための設定を行う。
# vi /etc/yum.repos.d/remi-php72.repo
----------------------------------------------------------------------
# This repository only provides PHP 7.2 and its extensions
# NOTICE: common dependencies are in "remi-safe"
[remi-php72]
name=Remi's PHP 7.2 RPM repository for Enterprise Linux 7 - $basearch
#baseurl=http://rpms.remirepo.net/enterprise/7/php72/$basearch/
#mirrorlist=https://rpms.remirepo.net/enterprise/7/php72/httpsmirror
mirrorlist=http://cdn.remirepo.net/enterprise/7/php72/mirror
enabled=1 <--------------------------- 「0」→「1」へ変更
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-remi
[remi-php72-debuginfo]
:
----------------------------------------------------------------------
目的のリポジトリが有効になったかを確認する。
# yum repolist enabled |grep php
* remi-php72: ftp.riken.jp
remi-php72 Remi's PHP 7.2 RPM repository for Enter 369 <--- これがあること
PHPのインストール
yumコマンドでPHP本体と、必要なPHPモジュールをインストールする。
以下は、WordPressなどの一般的なCMSを、MySQLを使って動かすために必要なPHPモジュールのインストールを含んだコマンドラインの例。
# yum install php php-common php-gd php-mbstring php-pdo php-mysqlnd php-xml php-mcrypt php-pear
バージョンを確認。
# php -v
PHP 7.2.19 (cli) (built: May 29 2019 11:04:13) ( NTS )
Copyright (c) 1997-2018 The PHP Group
Zend Engine v3.2.0, Copyright (c) 1998-2018 Zend Technologies
PHPの設定
インストールが完了したら「/etc/php.ini」ファイルを編集して必要な設定を行う。
以下の例ではもともとの設定をコメント「;」で残し、新しい設定を入れている。
# vi /etc/php.ini
----------------------------------------------------------------------
:
;expose_php = On
expose_php = Off <-------------------------------------- ①
:
;post_max_size = 8M
post_max_size = 50M <----------------------------------- ②
:
;upload_max_filesize = 2M
upload_max_filesize = 20M <----------------------------- ③
:
[Date]
; Defines the default timezone used by the date functions
; http://php.net/date.timezone
;date.timezone =
date.timezone = Asia/Tokyo <---------------------------- ④
:
; Default socket name for local MySQL connects. If empty, uses the built-in
; MySQL defaults.
; http://php.net/pdo_mysql.default-socket
;pdo_mysql.default_socket=
pdo_mysql.default_socket=/var/mysql/mysql.sock <-------- ⑤
:
; Default socket name for local MySQL connects. If empty, uses the built-in
; MySQL defaults.
; http://php.net/mysqli.default-socket
;mysqli.default_socket =
mysqli.default_socket = /var/mysql/mysql.sock <--------- ⑥
:
[mbstring]
; language for internal character representation.
; This affects mb_send_mail() and mbstring.detect_order.
; http://php.net/mbstring.language
mbstring.language = Japanese <-------------------------- ⑦
:
;mbstring.internal_encoding =
mbstring.internal_encoding = UTF-8 <-------------------- ⑧
:
;mbstring.http_input =
mbstring.http_input = pass <---------------------------- ⑨
:
;mbstring.http_output =
mbstring.http_output = pass <--------------------------- ⑩
:
;mbstring.detect_order = auto
mbstring.detect_order = UTF-8,SJIS,EUC-JP,JIS,ASCII <--- ⑪
:
----------------------------------------------------------------------
解説:
- ① セキュリティ対策:PHPのバージョンを隠蔽する。
- ② POSTデータの上限サイズを変更。CMSではこの値を大きくするような動作要件がある。例では50MBにしている。
- ③ ファイルアップロードの上限サイズを変更。20MBくらいに設定。
- ④ デフォルトのタイムゾーンを「Asia/Tokyo」に設定。
- ⑤ MySQLにPDOで接続する際の「mysql.sock」ファイルの場所を指定。
MySQLのデータ保存場所を変更している場合、ここを設定する(「MySQLのインストール」参照のこと)。 - ⑥ MySQLにmysqliで接続する際の「mysql.sock」ファイルの場所を指定。
MySQLのデータ保存場所を変更している場合、ここを設定する(「MySQLのインストール」参照のこと)。 - ⑦ マルチバイト設定。言語を「日本語」に明示的に宣言するためコメント(先頭の「;」)を外す。
- ⑧ マルチバイト文字列関数のデフォルトのエンコードを「UTF-8」に指定。
- ⑨ HTTP通信時のインプットのデフォルトエンコード。自動変換されないように「pass」を指定。
- ⑩ HTTP通信時のアウトプットのデフォルトエンコード。こちらも自動変換されないように「pass」を指定。
- ⑪ 文字コードの自動判別を行う際の優先順位。明示的に宣言しておくほうが良い。
動作確認
Apacheのドキュメントルートに下記のようにPHPファイルを作成する。
# cd /var/www/html <---------------- ドキュメントルートに移動
# vi phpinfo.php <------------------ 新規作成
----------------------------------------------------------------------
<?php phpinfo(); ?>
----------------------------------------------------------------------
Apacheを再起動する
# systemctl restart httpd
ブラウザで「http://対象サーバ/phpinfo.php」へアクセスし、下記のように表示されることを確認する。
※.確認が終わったら、作成した「phpinfo.php」は削除しておくこと。
- phpinfo.phpで表示される内容はシステム内部の詳細情報を表示するため、不特定多数の人に公開される状態で放置するのはセキュリティ上好ましくない。
特に公開サーバの場合は速やかに削除すること。